猿问

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

为什么我在这段代码中得到空指针异常?


    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();

    }


HUWWW
浏览 294回答 2
2回答

萧十郎

它将表达式评估为: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());

守着一只汪

从 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。
随时随地看视频慕课网APP

相关分类

Java
我要回答