Java null检查对象

use*_*641 1 java if-statement nullpointerexception null-check

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

if (person != null && person.getAge > 20) {...}
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?在同一行上进行null检查和对象访问?它是否正确?或者我必须在null检查语句上做一个内部语句,如:

if (person != null)
{
    if (person.getAge() > 20) {...}
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mad*_*ist 5

是.操作员&&||所谓的短路操作员.这意味着一旦知道答案,从左到右阅读,就不会评估条件中的其他语句.在您的情况下,一旦person != null部分评估false,整个条件将保证是假的,无论其他语句如何,因此person.getAge > 20不会被评估,也不会抛出异常.类似地,如果您使用||,并且第一部分评估为true,则不会评估第二部分,因为整体条件保证true在该点.

  • 谢谢.我觉得这个人很难找到文档,而不是阅读它们.如果不知道正确的术语,初学者很难进行有意义的搜索.真是一种恶性循环. (5认同)
  • +1提及短路 (2认同)