三目运算符遇到自动拆装箱

  1. 遇到的问题
    目前在做一个项目,有行代码上线报了NPE的错误,一直查找不出原因,最后上网终于在一篇博客中找到了。
    项目中的代码如下:
    String random = UUID.randomUUID().toString() + "-" + Thread.currentThread().getId();
	User user = new User();
    user.setAge(Objects.isNull(random) ? 0 : user.getAge());

这行代码报空指针

  1. 查找原因
    user.getAge()的值为空,但是为什么user.getAge()为空会报空指针?
    原来是当三目运算符的第二,第三位操作数分别为基本类型和对象时,其中的对象就会拆箱为基本类型。
    0是基本类型,而user.getAge()是对象,Integer包装类,该对象为null,所以在拆箱过程中调用null.intValue()的时候就报NPE。

  2. 解决办法
    将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());

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值