假设我有一个方法fun()
boolean fun()
{
System.out.println("Hello World");
return true;
}
我还有一个变量a
boolean a = true;
现在如果我写
boolean b = a || fun();
Java将评估||
的右侧还是停止(因为a
已经是true
,因此答案总是为true
,因此它不会评估||
的右侧)。
答案 0 :(得分:4)
请参阅来自oracle的文档:
条件运算符
&&和||运算符对两个布尔表达式执行条件与和条件或运算。 这些运算符表现出“短路”行为,这意味着仅在需要时才对第二个操作数进行求值。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
因此,由于“短路” fun()
已经确定了最终值,因此Java将不在此处计算a
表达式。
如果需要对fun()
进行评估,可以快速解决以下问题:
boolean b = fun() || a;
或
boolean funValue = fun();
boolean b = a || funValue;
答案 1 :(得分:2)
Java不会评估正确的表达式。
如果第一个表达式的值为&&
,则false
也是如此。
这是必需的,因此您可以执行以下操作:
if (a != null && !a.isEmpty()) {
//...
}