null.equals(null)在我的情况下不会抛出NullPointerException。无法理解。在else if条件中的以下代码片段中,basePartNumber和partNumber可能为null。当控件到来并且我在eclipse中调查时,我看到了一个NullPointerExcption。但它不会抛出异常,代码会继续下一次迭代。可以解释一下
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;
}
}
答案 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)。