Java中计算的布尔表达式顺序?

假设我有以下表达式

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

Eclipse 警告我,在布尔表达式的第二个短语中可能为 null。但是,我知道一些编译器会在第一个条件失败时完全退出布尔表达式。Java是这样吗?还是不能保证评估的顺序?myString


答案 1

但是,我知道一些编译器会在第一个条件失败时完全退出布尔表达式。Java是这样吗?

是的,这被称为短路评估。操作员喜欢并且是执行此类操作的操作员。&&||

还是不能保证评估的顺序?

不,保证评估顺序(从左到右)


答案 2

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

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

编辑:正如其他人提到的,Java对于布尔条件确实具有短路和非短路运算符。使用会触发短路评估,不会。&&&