[英]Boolean expression order of evaluation in Java?
假设我有以下表达式
String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}
Eclipse 警告我myString
在布尔表达式的第二个短语中可能为空。 但是,我知道有些编译器会在第一个条件失败时完全退出布尔表达式。 Java 是这样吗? 还是不保证评估顺序?
但是,我知道有些编译器会在第一个条件失败时完全退出布尔表达式。 Java 是这样吗?
是的,这就是所谓的短路评估。像&&
和||
这样的运算符是执行此类操作的运算符。
还是不保证评估顺序?
不,评估顺序是有保证的(从左到右)
Java 应该从左到右评估您的语句。 它使用一种称为短路评估的机制来防止在第一个条件为假时测试第二个、第三个和第 n 个条件。
因此,如果您的表达式为myContainer != null && myContainer.Contains(myObject)
并且myContainer
为 null,则不会评估第二个条件myContainer.Contains(myObject)
。
编辑:正如其他人提到的,特别是 Java 确实具有布尔条件的短路和非短路运算符。 使用&&
会触发短路评估,而&
不会。
詹姆斯和埃德是正确的。 如果您遇到这样一种情况,即无论先前的失败条件如何,您都希望对所有表达式进行求值,则可以使用非短路布尔运算符&
。
是的,Java 以这种方式对 if 语句进行惰性求值。 如果 myString==null,则不会评估 if 语句的其余部分
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.