我有两个几乎相同的代码片段(见下文)不能正常工作,但在我看来应该是一样的。
第一个是抛出NullPointerException
的 buggy 版本,第二个版本正常工作。将getNewIndex
结果分配给maxIdx
时会发生NPE。问题是为什么?
错误版本抛出NPE:
Integer maxIdx = fieldName.equals(Fields.KEYS) ? 1 :
getNewIndex(field.getGroup(), Fields.KEYS, Fields.PARAMS);
正确的工作版本:
Integer maxIdx = fieldName.equals(Fields.KEYS) ? 1 : null;
if (maxIdx == null) {
maxIdx = getNewIndex(field.getGroup(), Fields.KEYS, Fields.PARAMS);
}
如果有人想知道的话。我正在使用Oracle Java 1.8.0_45
答案 0 :(得分:7)
发生自动取消装箱是因为1
将三元操作的结果设置为int。
Integer
返回的getNewIndex
为空,这会在取消装箱时导致NPE
。
您可以使用new Integer(1)
来避免取消装箱。