Java中的布尔表达式评估顺序?

dav*_*lab 27 java boolean-logic boolean-expression compiler-warnings

假设我有以下表达式

String myString = getStringFromSomeExternalSource();
if (myString != null && myString.trim().length() != 0) {
...
}
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*rav 46

但是,我知道有些编译器会在第一个条件失败时完全退出布尔表达式.这对Java来说是真的吗?

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

或者评估顺序不保证?

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


Ed *_*fer 7

Java应该从左到右评估您的语句.它使用一种称为短路评估的机制来防止第一,第三和第n个条件被测试,如果第一个是假的.

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

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