0

可能重复:
&& (AND) 和 || (OR) 在 Java IF 语句中

if(foo || bar) {

}

foo为真时,它甚至会进入bar吗?

4

3 回答 3

7

不,||使用所谓的短路评估,也称为最小评估,并且一旦找到评估为true(从左到右)的表达式,就会停止评估条件。

JLS

15.24。条件或运算符 ||

条件或运算符 || 运算符就像 | (§15.22.2),但仅当其左侧操作数的值为假时才评估其右侧操作数。

&&以类似的方式运行:

15.23。条件与运算符 &&

条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为真时才计算其右侧操作数。

于 2012-08-27T11:55:03.497 回答
1

||并且&&都是短路逻辑运算符。

当两个表达式用 OR ( ||) 连接时,如果第一个为真,则答案始终为真。

||      true     false
true    true     true
false   true     false
于 2012-08-27T11:55:57.117 回答
1

&&||在知道结果后立即停止评估。例如:

if (a == null || a.get() == null)

效果很好,因为如果 a 为 null,则不会评估第二部分,并且您不会冒 NullPointerException 的风险。

如果您希望两个表达式都被评估,您可以使用无条件的&or |

if (a == null | a.get() == null)

将评估两个条件,无论第一个条件是否为真。

该线程提供了您可能希望发生这种情况的示例。

于 2012-08-27T12:00:16.647 回答