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

时间:2015-11-22 17:07:33

标签: java ternary-operator

我有以下代码产生此输出( -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 + " ");          
}

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

3 个答案:

答案 0 :(得分:4)

下面

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

仅当条件为false时才会添加空格。您应该使用parantheses随时添加" ",如下所示。

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

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

Oracle Site about Operator Precedence

  

下表列出了运算符   优先顺序。操作员离桌子越近   出现,其优先级越高。

enter image description here

答案 1 :(得分:0)

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

@WebServlet(displayName="JPA Servlet", urlPatterns="/JPAServlet")
public class JPAServlet extends HttpServlet {
    // ...
}

答案 2 :(得分:-1)

您错过了将操作放在圆括号内的原因,所以它的行为很奇怪,请使用下面的代码,

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

        System.out.println(msg);
     }

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