我试图在Java中验证数据类型BigDecimal上的NULL。我能够验证0值,但是NULL会导致NULL Point Exception。我应该在异常中处理此数据类型的验证,还是可以对数据进行一些计算以对其进行验证。下面是我到目前为止所做的一个示例:
if(crime.getCrimeLatLocation() != null & crime.getCrimeLongLocation() != null || crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0 & crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0){
logger.info('Valid Data');
}
最佳答案
您的||
应该是&&
-发生的情况是,当您传递空值时,它在前两个条件中的评估结果为false,但随后继续进行第三个和第四个条件,并导致异常。如果将||
更改为&&
,则短路评估将阻止评估第三和第四条件。
确保使用&&
而不是&
-前者使用短路评估,但后者将强制评估第三和第四条件,并且您将再次获得空指针异常。 condition1 && condition2
说“如果condition1为false,则返回false,否则评估condition2”-如果condition1为false,则从不评估condition2。相反,condition1 & condition2
将始终评估两个条件。使用&
的唯一原因是条件有副作用。同样,如果condition1为true,condition1 || condition2
不会评估condition2,但是|
始终会评估两个条件。