在开发中,遇到条件
表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)
示例:
class="java">ChildLog childLog = new ChildLog();
childLog.setName("");
childLog.setValue("");
Long assetsIdCtm1 = childLog.getAssetsid();
Long id = (null != childLog
&& !"12".equals(childLog.getStatusassets()))
? childLog.getRefid()
: 0l;
此
例子中,判断了null != childLog 但是childLog.getRefid()仍然报空指针
异常
将编译的class文件反编译:
Long id = Long.valueOf((childLog != null) &&
(!"12".equals(childLog.getStatusassets())) ?
childLog.getRefid().longValue() :
0L);
由此可见,当变量类型是Long,且是条件表达式赋值时,会将条件表达式转换为Long(Long.valueOf)。外面套一层Long.valueOf后,如果返回为null,转换就会报错