好吧,这是一个简单的问题,我没有任何问题,但我只是想确定.如果我做这样的事情,这是正确的吗?
if (person != null && person.getAge > 20) {...}
我可以这样做吗?在同一行上进行null检查和对象访问?它是否正确?或者我必须在null检查语句上做一个内部语句,如:
if (person != null) { if (person.getAge() > 20) {...} }
imo,第一个声明不会抛出NPE,但我需要专业人士的反馈......
一般来说,我的问题是,对于带有&&的if语句,如果第一个布尔值为false,JVM是否会停止执行if语句,否则它将全部检查?
是.操作员&&
和||
所谓的短路操作员.这意味着一旦知道答案,从左到右阅读,就不会评估条件中的其他语句.在您的情况下,一旦person != null
部分评估false
,整个条件将保证是假的,无论其他语句如何,因此person.getAge > 20
不会被评估,也不会抛出异常.类似地,如果您使用||
,并且第一部分评估为true
,则不会评估第二部分,因为整体条件保证true
在该点.