【发布时间】:2012-03-05 02:43:03
【问题描述】:
当与 boolean 操作数一起使用时,& 和 | 根据 Section 15.22.2 of the JLS 成为 逻辑 运算符。然而,与&& 和|| 不同的是,它们不会短路。他们总是评估双方。我有一个愚蠢的问题:为什么效率较低的非短路逻辑运算符(&,|)仍然存在,而我们拥有更高效的短路逻辑运算符(&&,@987654331 @)?我的意思是,与短路逻辑运算符相比,非短路逻辑运算符的真正用途是什么?换句话说,总是使用非短路逻辑运算符来评估双方有什么用?
【问题讨论】:
-
这与效率无关,它们有不同的语义
-
这就是 C 所做的。 / 实际上在某些情况下它们可以更快,因为它们可能会减少分支。评估 rhs(邪恶)也可能有副作用。
-
@TomHawtin-tackline:C 不会短路
&和|。与 Java 一样,它会短路&&和||,但不会短路&和|。 -
感谢 T.J. 的编辑。克劳德