Android支持短路吗?

时间:2012-02-28 04:11:50

标签: java android logic

这似乎是一个愚蠢的问题,因为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上找到类似问题的事实可能会给我答案,但比抱歉更安全。

2 个答案:

答案 0 :(得分:5)

||支持短路。

如果您尝试优化此案例,则应尝试将每个值置于静态Set中,然后检查是否typeSet.contains(mimeType)

答案 1 :(得分:2)

是的,||(条件或)运算符是短路运算符。引用Java Language Specification

  

||运算符与|§15.22.2)类似,但仅在其左侧操作数的值为false时才计算其右侧操作数。它在语法上是左关联的(它从左到右分组)。它与副作用和结果值完全相关;也就是说,对于任何表达式a,b和c,表达式((a)||(b))||(c)的评估产生相同的结果,同样的副作用以相同的顺序发生,作为评估表达式(a)||((b)||(c))。