Java 三元运算符语法

标签 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);
    }
}

最佳答案

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

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

可以认为是:

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

这显然不会编译,因为您不能为不是变量的东西赋值。

关于Java 三元运算符语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162148/

相关文章:

python: iif 或 (x ? a : b)

java - 即使满足条件,Java 中的 while 循环也不会中断

java - VideoView 上为空

haskell - 语法 $$ 在 Haskell 中是什么意思?

java - 方法可以在不声明的情况下抛出 java.lang.Exception 吗?

c - 循环条件中的三元运算符 : evaluation order/op. 优先级不明确

java - 为什么三元运算符会意外地转换整数?

java - Lucene 的 Spring Bean 配置

java - 如何在NetBeans中打包JavaCV/OpenCV?

用平均方法求平均值的java程序