有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译器警告Java中的布尔表达式求值顺序?

假设我有下面的表达式

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}

Eclipse警告我在布尔表达式的第二个短语中myString可能为空。然而,我知道,如果第一个条件失败,一些编译器将完全退出布尔表达式。Java也是这样吗?还是评估的顺序没有保证


共 (2) 个答案

  1. # 1 楼答案

    是的,Java以这种方式对if语句进行惰性求值。如果myString==null,则不会计算if语句的其余部分

  2. # 2 楼答案

    Java应该从左到右评估语句。它使用一种称为short-circuit evaluation的机制来防止在第一个条件为假时测试第二个、第三个和第n个条件

    因此,如果表达式为myContainer != null && myContainer.Contains(myObject)myContainer为空,则第二个条件myContainer.Contains(myObject)将不会被计算

    Edit:正如其他人所提到的,Java特别具有布尔条件的短路和非短路运算符。使用&&会触发短路评估,而&不会