Java null检查对象

时间:2014-02-04 20:14:12

标签: java if-statement nullpointerexception null-check

好吧,这是一个简单的问题,我没有任何问题,但我只想确定。如果我做这样的事情,这是正确的吗?

if (person != null && person.getAge > 20) {...}
我能这样做吗?在同一行上进行null检查和对象访问?它是否正确?或者我必须在null检查语句上做一个内部语句,如:

if (person != null)
{
    if (person.getAge() > 20) {...}
}

imo,第一个声明不会引发NPE,但我需要专业人士的反馈......

一般来说,我的问题是,如果带有&&的if语句,如果第一个布尔值为false,JVM是否会停止执行if语句,或者它会检查所有语句?

5 个答案:

答案 0 :(得分:5)

是。运算符&&||是所谓的短路运算符。这意味着一旦知道答案,从左到右阅读,就不会评估条件中的其他语句。在您的情况下,只要person != null部分评估为false,无论其他语句如何,整个条件都将保证为假,因此person.getAge > 20将不会被评估且不会抛出一个例外。同样,如果您使用||,并且第一部分评估为true,则不会评估第二部分,因为此时整体条件保证为true

答案 1 :(得分:1)

是的,你可以做到这一点。如果person为null,则会看到

if(person != null && otherBoolean  )

如果person != null为假,则与otherBoolean无关,因为无论如何,表达式都将保证为假。

它首先评估最左边的表达式,所以如果你以其他顺序使用它,那就行不了。


作为附注,您可以通过编写以下内容轻松测试:

person = null;

if (person != null && person.getAge > 20) {...}

答案 2 :(得分:0)

它被称为短路,这样做非常好。

if (person != null && person.getAge > 20) {...}

始终确保您进行null检查,&&只有在前一个条件为true时才会检查下一个条件。

在这种情况下,只有在person.getAge > 20person != null时才会true进行检查。


同时检查此问题:Java logical operator short-circuiting

进一步阅读:Avoiding “!= null” statements in Java?

答案 3 :(得分:0)

if (person != null && person.getAge > 20) {...}//good to go with that

当然,在这种情况下,如果此人为空,则不会评估person.getAge> 20所以你不会得到NPE

了解&& java中的运算符肯定不会检查第二个值

答案 4 :(得分:0)

if (person != null && person.getAge > 20) {...}

&&是短路逻辑AND。因此,如果person != null为false,则不会评估person.getAge > 20

&是逻辑上的,不会短路。如果使用if (person != null & person.getAge > 20)person为null,则在评估person.getAge > 20时将获得空指针异常。