为什么我在这段代码中得到空指针异常? 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 + " " + test
is not null
,它test.toString()
即使在test
is时也会尝试调用null
。
改变
data = data + " " + test==null?"":test.toString();
到
data = data + " " + (test==null?"":test.toString());
守着一只汪
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
。
添加回答
举报
0/150
提交
取消