**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
一年前关门了。
改进这个问题
我有这个密码。。。
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”是如何用一个等号打印出来的,但是我知道把它改成一个双等号不会打印出来
4条答案
按热度按时间kxkpmulp1#
赋值是一个表达式,在这种情况下,它解析为被赋值的任何东西
(mySuperBoolean = Boolean.TRUE)
是一个表达式,解析为Boolean.TRUE
.这只在一些特定情况下有用。下面的成语就是这样一个例子:
甚至
这是一个有争议的特性,因为它允许像您这样的可能的bug成功编译。为了缓解这种情况,有些人会反转操作数(“yoda条件”):
这是因为如果我忘记了第二个等于,那么编译器会抛出一个错误,因为
Boolean.TRUE
是最终的,不能分配给。w7t8yxp52#
赋值运算符的结果
=
将是指定的值。所以呢if (mySuperBoolean = Boolean.TRUE)
将始终评估true
.bpsygsoo3#
本质上,这里发生的事情可以归结为:
该赋值将true放入变量中,变量是布尔型的,并检查其当前值“故事结束”。
bfnvny8b4#
if (mySuperBoolean = Boolean.TRUE)
将boolean.true赋值给mySuperBoolean
变量和条件的计算结果将为true,因此,如果它始终执行,则