我在下面的代码行
String name = null;
if (something)
name = someString;
if (name != null && name.equals("XYZ"))
doSomethingWith ("hello");
如果“something”为false,上面的if条件会导致NullPointerException吗? 如果不是为什么不呢?
答案 0 :(得分:9)
不,它不会。 Java中的&&
运算符是short-circuit运算符,因此如果name
为null
,则name.equals()
将不会被执行(因为false && anything
是false
仍然是||
)。
顺便说一句,与true
相同:如果左侧评估为{{1}},则不会检查右侧。
答案 1 :(得分:2)
不,不会。 &&的右手边运算符只有在&&的左侧时才会执行运算符是真的。
同样适用于 ||运算符,如果左侧为真,则右侧不会执行。
答案 2 :(得分:0)
不,由于if
语句的编写方式,它不会导致NullPointerException。你有:
if ( name != null && name.equals("XYZ")) {
//do stuff...
}
if
语句中的条件从左到右进行评估。因此,如果name
为空,则name != null
条件评估为false
,而false && <anything>
评估为false
,则name.equals("XYZ")
条件甚至不会得到评估。
此行为是runtime optimization,它可以避免执行不会影响if
语句结果的代码,并且恰好也会阻止您的示例代码生成NullPointerException。