这似乎是一个愚蠢的问题,因为Java确实发生了短路,但我记得Android并没有像我想象的那样使用Java,所以在我写的这段代码中说:
... code omitted ...
else if (mimeType.equals("application/x-tar")
|| mimeType.equals("application/x-rar-compressed")
|| mimeType.equals("application/stuffit")
|| mimeType.equals("application/zip")
|| mimeType.equals("application/x-gzip"))
...在不太常见的事情(tarballs / gzip)之前把更常见的东西(zip / rar)放到我身边会更好吗?
我无法在SO上找到类似问题的事实可能会给我答案,但比抱歉更安全。
答案 0 :(得分:5)
||
支持短路。
如果您尝试优化此案例,则应尝试将每个值置于静态Set
中,然后检查是否typeSet.contains(mimeType)
。
答案 1 :(得分:2)
是的,||
(条件或)运算符是短路运算符。引用Java Language Specification:
||
运算符与|
(§15.22.2)类似,但仅在其左侧操作数的值为false时才计算其右侧操作数。它在语法上是左关联的(它从左到右分组)。它与副作用和结果值完全相关;也就是说,对于任何表达式a,b和c,表达式((a)||(b))||(c)的评估产生相同的结果,同样的副作用以相同的顺序发生,作为评估表达式(a)||((b)||(c))。