欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java条件表达式陷阱 博客分类: developjava javadevelop 

程序员文章站 2024-02-12 20:13:04
...
在开发中,遇到条件表达式,空指针报错,但条件已经判断了非空情况(误以为是对象为空)

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


相关标签: java develop