【发布时间】:2017-06-21 10:15:24
【问题描述】:
我在各州工作的一本书:
短路运算符与逻辑运算符几乎相同, 分别为
&和|,但如果最终结果可以由表达式的左侧确定,则表达式的右侧可能永远不会被计算
为了测试这个我试过了
int y = 1;
boolean x = false | (y < 4);
System.out.print(x); //true
如预期的那样打印出 true。
然而
int y = 1;
boolean x = false || (y < 4);
System.out.print(x); //true
还打印出 true 这似乎与书“如果最终结果可以由表达式的左侧确定,则表达式的右侧可能永远不会被计算”相矛盾。
我假设 x 将采用 false 的值,因为最终结果可以仅从左侧确定
【问题讨论】:
-
仅当无法从左侧确定结果时才评估右侧。
-
您需要查看 RH 操作数来评估
false || rh,因为它的值等于rh。 -
当其中一个操作数为真时,or 表达式为真。因此,在测试第一个等于 false 之后,它会测试第二个,它的计算结果为 true。如果第一个评估为真,它将短路。
-
也许this application 会更清楚。这两个表达式都表示
true OR true,最终都等于true。然而,逻辑 OR 足够聪明,可以知道true OR {anything}的计算结果总是true。因此,它不会打扰调用函数foo,并且永远不会打印字符串“逻辑或”。
标签: java boolean operator-keyword