这会创建NullPointerException,如果不是为什么不呢?

时间:2011-06-14 04:54:01

标签: java nullpointerexception

我在下面的代码行

String name = null;
if (something)
    name = someString;
if (name != null && name.equals("XYZ"))
    doSomethingWith ("hello");

如果“something”为false,上面的if条件会导致NullPointerException吗? 如果不是为什么不呢?

3 个答案:

答案 0 :(得分:9)

不,它不会。 Java中的&&运算符是short-circuit运算符,因此如果namenull,则name.equals()将不会被执行(因为false && anythingfalse仍然是||)。

顺便说一句,与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。