我试图在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,但是|始终会评估两个条件。

09-12 16:58