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三元运算符语法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

★Java语法——————————三元运算符

kotlin中的三元运算符[重复]

Kotlin三元运算符[重复]

Kotlin 等效于三元运算符 [重复]

Java - 三元运算符不起作用。编译器声明它不是一个声明[重复]

kotlin中的三元运算符[重复]