不同情况下的单个相等

ogsagwnx  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(317)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

一年前关门了。
改进这个问题
我有这个密码。。。

class Test {

    public static void main(String[] args) {
        Boolean mySuperBoolean = Boolean.FALSE;

        System.out.print("a");
        if (mySuperBoolean = Boolean.TRUE) {
            System.out.print("b");
        }

        System.out.print("c");
    }
}

我是java新手,但我知道单等号(=)用于赋值。和double equals(==)用于检查对象是否引用到内存中的同一位置。但是,在这种情况下,我不明白“b”是如何用一个等号打印出来的,但是我知道把它改成一个双等号不会打印出来

kxkpmulp

kxkpmulp1#

赋值是一个表达式,在这种情况下,它解析为被赋值的任何东西 (mySuperBoolean = Boolean.TRUE) 是一个表达式,解析为 Boolean.TRUE .
这只在一些特定情况下有用。下面的成语就是这样一个例子:

String line;
while ((line = readLine()) != null) {
    //...
}

甚至

i = j = k = 0; // equal to: i = (j = (k = 0))

这是一个有争议的特性,因为它允许像您这样的可能的bug成功编译。为了缓解这种情况,有些人会反转操作数(“yoda条件”):

if (Boolean.TRUE == mySuperBoolean)

这是因为如果我忘记了第二个等于,那么编译器会抛出一个错误,因为 Boolean.TRUE 是最终的,不能分配给。

w7t8yxp5

w7t8yxp52#

赋值运算符的结果 = 将是指定的值。所以呢 if (mySuperBoolean = Boolean.TRUE) 将始终评估 true .

bpsygsoo

bpsygsoo3#

本质上,这里发生的事情可以归结为:

if (Boolean.TRUE) {
  System.out.print("b");
}

该赋值将true放入变量中,变量是布尔型的,并检查其当前值“故事结束”。

bfnvny8b

bfnvny8b4#

if (mySuperBoolean = Boolean.TRUE) 将boolean.true赋值给 mySuperBoolean 变量和条件的计算结果将为true,因此,如果它始终执行,则

相关问题