Java三元运算符语法

use*_*726 3 java syntax ternary-operator

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

在第一种情况下,三元运算符返回的值y,因为x=4和打印语句打印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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Aug*_*ust 5

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

(x==4)?x=y:x = z;
Run Code Online (Sandbox Code Playgroud)

可以被认为是:

((x==4)?x=y:x) = z;
Run Code Online (Sandbox Code Playgroud)

显然无法编译,因为您无法为不是变量的内容赋值.