为了账号安全,请及时绑定邮箱和手机立即绑定

用于 Bigdecimal null 验证的三元运算符

用于 Bigdecimal null 验证的三元运算符

HUWWW 2021-12-01 15:54:38
为什么我在这段代码中得到空指针异常?    BigDecimal test = null;    String data = "";    try {    System.out.println(test==null?"":test.toString());    data = test==null?"":test.toString();    System.out.println(data);    data = data +  " " + test==null?"":test.toString(); // catching null pointer in this line    } catch (Exception e) {        // TODO: handle exception        e.printStackTrace();    }
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

它将表达式评估为:

data = (data +  " " + test==null)?"":test.toString();

因此,由于data +  " " + testis not null,它test.toString()即使在testis时也会尝试调用null

改变

data = data +  " " + test==null?"":test.toString();

data = data +  " " + (test==null?"":test.toString());


查看完整回答
反对 回复 2021-12-01
?
守着一只汪

TA贡献1872条经验 获得超3个赞

从 Java 8 开始,还有一种处理潜在null引用的替代方法:Optional

要在将 a 转换BigDecimal为 a时防止 NPE,String您可以使用Optional类似的方法:

String data = Optional.ofNullable(test).map(BigDecimal::toString).orElse("");

这样你就不需要test多次检查它是否是null。说完test一旦包裹在一个Optional你可以上是安全的工作,即任何转换(map)将仅执行test不引用null


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 286 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信