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

Java三元运算符优先级?给出了不同的输出,java,ternary-operator,Java,Ternary Operator,我有下面的代码生成这个输出(在-1之后没有空格)==>“13-14-15-1” 但是如果我单独计算三元表达式(如下所示),它会给出不同的输出(我期望的结果)==>“13-14-15-1” 第一个代码段出了什么问题?这里 (dist == Integer.MAX_VALUE) ? -1 : dist + " " 仅当条件为false时,才会添加空格。您应该始终使用paranethes添加”,如下所示 ((dist == Integer.MAX_VALUE) ? -1 : dist) + " "

我有下面的代码生成这个输出(在-1之后没有空格)==>
“13-14-15-1”

但是如果我单独计算三元表达式(如下所示),它会给出不同的输出(我期望的结果)==>“13-14-15-1”

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

这里

(dist == Integer.MAX_VALUE) ? -1 : dist + " "
仅当条件为
false
时,才会添加空格。您应该始终使用paranethes添加
,如下所示

((dist == Integer.MAX_VALUE) ? -1 : dist) + " "
三元运算符只有运算符优先于赋值运算符。(见下文)


下表中的操作员是根据 优先顺序。离桌子顶部越近的是操作员 出现时,其优先级越高


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

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

如果你需要任何其他的帮助或解释。请让我知道。

接线员是否在您之前到达?因此,添加了冗余括号后,您的行是
dist==Integer.MAX\u值-1:(dist+“”)
您似乎回答了错误的问题。你可能是想回答这个问题,它被标记为这个问题的副本。为什么你把它标记为-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) + " ");
    }
try{
        throw new ArithmeticException("Exception Testing...");
    }catch(Exception e){
        String msg = "First Statement : " + (e.getCause() != null ? e.getMessage() : null);

        System.out.println(msg);
     }