验证null的BigDecimal数据类型在Java中

时间:2013-04-10 20:59:10

标签: java validation bigdecimal

我正在尝试验证java中数据类型BigDecimal的NULL。我能够验证0值,但是NULL会导致 NULL Point Exception 。我是否应该在异常中处理此数据类型的验证,或者是否有一些计算我可以对数据进行预处理以验证它。 Under是我到目前为止所做的一个例子:

 if(crime.getCrimeLatLocation() != null  & crime.getCrimeLongLocation() != null || crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0 & crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0){

     logger.info('Valid Data');
    }

3 个答案:

答案 0 :(得分:3)

你的||应该是&& - 正在发生的事情是当你传入一个空值时,它在前两个条件中评估为假,但随后它继续进行第三和第四个条件并导致例外。如果您将||更改为&&,那么短路评估将阻止评估第三和第四个条件。

一定要使用&&而不是& - 前者使用短路评估,但后者会强制评估第三和第四个条件,你会得到一个空指针例外。 condition1 && condition2表示“如果condition1为false则返回false,否则评估condition2” - 如果condition1为false,则从不评估condition2。相反,condition1 & condition2将始终评估这两个条件。使用&的唯一原因是条件有副作用。同样,如果condition1为true,condition1 || condition2将不会评估condition2,但|将始终评估这两个条件。

答案 1 :(得分:1)

你的考试

if(crime.getCrimeLatLocation() != null  & crime.getCrimeLongLocation() != null 
|| crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0 & crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0)

使用二进制非布尔运算符,将其更改为

if((crime.getCrimeLatLocation() != null  && crime.getCrimeLatLocation().compareTo(BigDecimal.ZERO) != 0) 
|| (crime.getCrimeLongLocation() != null && crime.getCrimeLongLocation().compareTo(BigDecimal.ZERO) != 0))

这表示crimeLatLocation不是null而不是0或crimeLongLocation不是null而不是zero

当您使用&时,表达式的两边都会被评估,当您使用&&时,如果表达式的第一部分是false,则测试会被短路。

答案 2 :(得分:1)

在比较之前,您需要检查空值。您可以使用此功能进行比较。

PUT