- 遇到的问题
目前在做一个项目,有行代码上线报了NPE的错误,一直查找不出原因,最后上网终于在一篇博客中找到了。
项目中的代码如下:
String random = UUID.randomUUID().toString() + "-" + Thread.currentThread().getId();
User user = new User();
user.setAge(Objects.isNull(random) ? 0 : user.getAge());
这行代码报空指针
-
查找原因
user.getAge()的值为空,但是为什么user.getAge()为空会报空指针?
原来是当三目运算符的第二,第三位操作数分别为基本类型和对象时,其中的对象就会拆箱为基本类型。
0是基本类型,而user.getAge()是对象,Integer包装类,该对象为null,所以在拆箱过程中调用null.intValue()的时候就报NPE。 -
解决办法
将0用Integer类型的变量代替,使用包装类型。代码如下,现在问题解决
String random = UUID.randomUUID().toString() + "-" + Thread.currentThread().getId();
User user = new User();
Integer age = new Integer(0);
user.setAge(Objects.isNull(random) ? age : user.getAge());