Java三元运算符语法

时间:2015-01-27 02:16:34

标签: java syntax ternary-operator

我有以下代码。这就是我理解的方式。

在第一种情况下,三元运算符返回y的值,因为x=4并且print语句按预期打印5

在第二种情况下,三元运算符首先将y的值赋给x,然后返回该值。再次,它按预期打印5。

在第三种情况下,三元运算符在x=y左侧的x=z:右侧public class Test { public static void main(String[] args) { int x = 4; int y = 5; int z = -1; x = (x == 4) ? y : z; // compiles and runs fine System.out.println(x + " " + y + " " + z); x = (x == 4) ? x = y : z; // compiles and runs fine System.out.println(x + " " + y + " " + z); x = (x == 4) ? x = y : x = z; // Does not compile System.out.println(x + " " + y + " " + z); } } 。我希望这与第二种情况非常相似。但是,这个语句甚至没有编译。

理解这一点的任何帮助将不胜感激。

{{1}}

2 个答案:

答案 0 :(得分:5)

赋值的优先级低于三元表达式,因此表达式为:

(x==4)?x=y:x = z;

可以被认为是:

((x==4)?x=y:x) = z;

这显然不会编译,因为您无法为不属于变量的内容分配值。

答案 1 :(得分:2)

添加括号以控制评估顺序

x = (x == 4) ? (x = y) : (x = z); // Does compile.

注意以上相当于

if (x == 4) {
    x = (x = y);
} else {
    x = (x = z);
}

x分配值的(作为副作用)将分配给x的值分配给x。换句话说,你的三元相当于

x = (x == 4) ? y : z;

if (x == 4) {
   x = y;
} else {
   x = z;
}

三元组在JLS-15.25. Conditional Operator ? :中指定。