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)
赋值的优先级低于三元表达式,因此这个表达式:
(x==4)?x=y:x = z;
Run Code Online (Sandbox Code Playgroud)
可以被认为是:
((x==4)?x=y:x) = z;
Run Code Online (Sandbox Code Playgroud)
显然无法编译,因为您无法为不是变量的内容赋值.