Java三元运算符语法[重复]
Posted
技术标签:
【中文标题】Java三元运算符语法[重复]【英文标题】:Java Ternary operator syntax [duplicate] 【发布时间】:2015-03-25 13:49:23 【问题描述】:我有以下代码。我是这样理解的。
在第一种情况下,三元运算符返回 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);
【问题讨论】:
x = (x==4)?(x=y):(x=z);
或 x = (x==4)?x=y:(x=z);
都可以。
【参考方案1】:
赋值的优先级低于三元表达式,所以这个表达式:
(x==4)?x=y:x = z;
可以认为是:
((x==4)?x=y:x) = z;
这显然不会编译,因为您不能为不是变量的东西赋值。
【讨论】:
【参考方案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 ? :
中指定。
【讨论】:
以上是关于Java三元运算符语法[重复]的主要内容,如果未能解决你的问题,请参考以下文章