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

Dek*_*kso 2 java ternary-operator nullpointerexception bigdecimal

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

    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();
    }
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

它将表达式评估为:

data = (data +  " " + test==null)?"":test.toString();
Run Code Online (Sandbox Code Playgroud)

那么,既然data + " " + test不是null,它试图调用test.toString(),即使testnull.

更改

data = data +  " " + test==null?"":test.toString();
Run Code Online (Sandbox Code Playgroud)

data = data +  " " + (test==null?"":test.toString());
Run Code Online (Sandbox Code Playgroud)