Java 三元运算符优先级?给出不同的输出

Java ternary operator precedence ? Different outputs given

我有下面的代码产生这个输出(no space after -1)==> "1 3 -14 -15 -1"

int [] arr = {1, 3, Integer.MAX_VALUE, 4, Integer.MAX_VALUE, 5, Integer.MAX_VALUE};
for (int dist : arr) {
    System.out.print((dist == Integer.MAX_VALUE) ? -1 : dist + " ");
}

但是如果我单独计算三元表达式(如下所示),它会给出不同的输出(我所期望的)==> "1 3 -1 4 -1 5 -1"

int [] arr = {1, 3, Integer.MAX_VALUE, 4, Integer.MAX_VALUE, 5, Integer.MAX_VALUE}; 
for (int dist : arr) {
    int finalDist = (dist == Integer.MAX_VALUE) ? -1 : dist;
    System.out.print(finalDist + " ");          
}

第一个代码片段出了什么问题?

这里

(dist == Integer.MAX_VALUE) ? -1 : dist + " "

只有条件为false才会添加space。您应该始终使用括号添加 " ",如下所示。

((dist == Integer.MAX_VALUE) ? -1 : dist) + " "

三元运算符只有运算符优先级高于赋值运算符。 (见下文)


Oracle Site about Operator Precedence

The operators in the following table are listed according to precedence order. The closer to the top of the table an operator appears, the higher its precedence.

这只是你括号的一个简单问题。试试这个:

int [] arr = {1, 3, Integer.MAX_VALUE, 4, Integer.MAX_VALUE, 5, Integer.MAX_VALUE};

    for (int dist : arr) {
        System.out.print(((dist == Integer.MAX_VALUE) ? -1 : dist) + " ");
    }

你没有把操作放在括号内,所以它表现得很奇怪,使用下面的代码,

try{
        throw new ArithmeticException("Exception Testing...");
    }catch(Exception e){
        String msg = "First Statement : " + (e.getCause() != null ? e.getMessage() : null);

        System.out.println(msg);
     }

如果您需要任何其他帮助或解释。请告诉我。