java条件表达式陷阱 博客分类: developjava javadevelop
程序员文章站
2024-02-12 20:13:04
...
在开发中,遇到条件表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)
示例:
此例子中,判断了null != childLog 但是childLog.getRefid()仍然报空指针异常
将编译的class文件反编译:
由此可见,当变量类型是Long,且是条件表达式赋值时,会将条件表达式转换为Long(Long.valueOf)。外面套一层Long.valueOf后,如果返回为null,转换就会报错
示例:
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,转换就会报错