为什么null.equals(null)不会抛出NullPointerException

时间:2015-09-04 06:42:27

标签: java nullpointerexception

null.equals(null)在我的情况下不会抛出NullPointerException。无法理解。在else if条件中的以下代码片段中,basePartNumber和partNumber可能为null。当控件到来并且我在eclipse中调查时,我看到了一个N​​ullPointerExcption。但它不会抛出异常,代码会继续下一次迭代。可以解释一下

String basePartnumber = null;
for(Row detailRow:detailRows){
String partNumber = AscendRowUtil.getString(detailRow, ASNConstants.BUYER_PART_NUMBER);
                if(basePartnumber == null){
                    basePartnumber = partNumber;
                } else if(!basePartnumber.equals(partNumber)){
                    validationResult.addMessage(ASNI18nMessageKeys.ERROR_ASN_CANNOT_HAVE_DIFFERENT_PARTNUMBER_ITEMS);
                    break;
                }
            }   

3 个答案:

答案 0 :(得分:5)

让我们看看你的代码。 else部分永远不会执行,因为basePartnumer == null始终为真,因为basePartnumber = null

String basePartnumber = null;
...
if(basePartnumber == null){
    basePartnumber = partNumber;
} else if(!basePartnumber.equals(partNumber)){

答案 1 :(得分:0)

basePartnumber在else-if条件下永远不会为null,因为如果它为null,则上面的代码为executet。所以它永远不会达到这一点。 ;)

答案 2 :(得分:0)

                if(basePartnumber == null){ // 1
                    basePartnumber = partNumber;
                } else if(!basePartnumber.equals(partNumber)){ // 2
                    validationResult.addMessage(ASNI18nMessageKeys.ERROR_ASN_CANNOT_HAVE_DIFFERENT_PARTNUMBER_ITEMS);
                    break;
                }

在你的例子中,对于任何null,第1行都是true,因为你使用了else-if,这是一种说法

if(basePartnumber ==null){
  // code here
}else {
  if (!basePartnumber .equals(partNumber)){
    // code here
  }
}

你的行

  !basePartnumber.equals(partNumber)

是null安全的(第2行中basePartnumber永远不为null)。