本文共 957 字,大约阅读时间需要 3 分钟。
编写的代码在uat
运行,发现发生NPE
。经检查,确定是运算符+
引起的,这让我匪夷所思,但接下来的代码验证了我的猜想:
/** * @author Virgil.Wang */public class AddSymbolTest { public static void main(String[] args) { Integer m = 10; Integer n = null; System.out.println(m); System.out.println(n); System.out.println(m + n); }}
输出结果
10nullException in thread "main" java.lang.NullPointerException at edu.virigl.other.AddSymbolTest.main(AddSymbolTest.java:13)Process finished with exit code 1
结论,在进行包装类型,如Integer
,Long
等保障类型想加时,除了保证对象非空外,还要保证对象中的包装类型的属性不能为空。推荐做法如下:
public static void main(String[] args) { Integer m = 10; Integer n = null; System.out.println(m); System.out.println(n); // FIXME 修改后的做法 System.out.println((m == null ? 0 : m) + (n == null ? 0 : n)); }
Java
在运算时,应该是以基本数据类型进行运算操作的(未找到相关的文档说明)。在两个Integer
对象想加时,虚拟机隐式的调用Integer#intValue()
将Integer
对象转向转换为int
类型。当Integer
对象为空时,intValue()
会抛出NullPointerException
。
转载地址:http://pjxii.baihongyu.com/