java条件表达式陷阱_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java条件表达式陷阱

java条件表达式陷阱

 2017/8/3 18:31:20  永无止境2313  程序员俱乐部  我要评论(0)
  • 摘要:在开发中,遇到条件表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)示例:ChildLogchildLog=newChildLog();childLog.setName("");childLog.setValue("");LongassetsIdCtm1=childLog.getAssetsid();Longid=(null!=childLog&&!"12".equals(childLog.getStatusassets()))?childLog.getRefid
  • 标签:Java 陷阱 表达式
在开发中,遇到条件表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)

示例:
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,转换就会报错


发表评论
用户名: 匿名