Java 三元运算的行为异常

Java 三元运算的行为异常,java,nullpointerexception,ternary-operator,Java,Nullpointerexception,Ternary Operator,在下面的代码中,我很难理解三元运算是如何工作的 public static void main(String[] args) { try{ throw new ArithmeticException("Exception Testing..."); }catch(Exception e){ msg = "First Statement : " + e.getCause() != null ? e.getMessage

在下面的代码中,我很难理解三元运算是如何工作的

public static void main(String[] args) {
        try{
            throw new ArithmeticException("Exception Testing...");
        }catch(Exception e){
            msg = "First Statement : " + e.getCause() != null ? e.getMessage() : null;  //Here e.getCause() is null
            System.out.println(msg);  //  prints "Exception Testing..."
         }
    }
第一条语句
块(第4行)中,e.getcause()
为空,因此它应该打印
第一条语句:空
,而只打印
异常测试…

我的问题是,

1) 为什么在三元运算中执行TRUE block而不是返回null

2) 为什么
第一条语句:
未打印消息
异常测试…


提前感谢。

由于运算符优先级,在
?:
之前应用了
+
,因此您正在检查是否:

"First Statement : " + e.getCause()
是空的-不是空的

添加括号:

 msg = "First Statement : " + (e.getCause() != null ? e.getMessage() : null);

“第一条语句:”+e.getCause()
不为空,因此
“第一条语句:”+e.getCause()!=null
为真。此问题有重复项。我就是找不到它。
e.getCause()!=无效的e、 getMessage():null
没有什么意义。您可能是指
e.getCause()==null?e、 getMessage():e.getCause().getMessage()
@AndrewTobilko我只是这个意思。e、 getCause()!=无效的e、 getMessage():null。因为我知道e.getCause()为空。我只是想知道为什么要执行e.getMessage()。@Arun我一直在删除你对Andi:)的“谢谢”,这不是真的需要,你可以接受他的回答