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

假设我有以下表达式

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

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

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

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

或者评估顺序无法保证?

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

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

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

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

詹姆斯和艾德是对的。 如果您遇到一个案例,您希望无论先前的失败条件如何都要评估所有表达式,您可以使用非短路布尔运算符&

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