不同情况下的单身平等
Single equal in different situation
我有这个代码...
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 的新手,但我知道单等号 (=) 用于赋值。双等号 (==) 用于检查对象是否指向内存中的同一位置。但是,在这种情况下,我不明白 'b' 是如何用单个等号打印的,但我知道将其更改为双等号不会打印出来
if (mySuperBoolean = Boolean.TRUE)
将 assign Boolean.TRUE 给你的 mySuperBoolean
变量并且条件将评估为真,因此无论你里面的是什么会一直执行
赋值运算符=
的结果将是赋值。所以 if (mySuperBoolean = Boolean.TRUE)
将始终评估为 true
.
本质上,这里发生的事情归结为:
if (Boolean.TRUE) {
System.out.print("b");
}
该赋值将 TRUE 放入变量,变量为布尔值,并检查其当前值,故事结束。
赋值是一个 expression,它解析为赋值的任何内容,在这种情况下,
(mySuperBoolean = Boolean.TRUE)
是一个解析为 Boolean.TRUE
.
的表达式
这实际上只在少数特定情况下有用。一种这样的情况是以下成语:
String line;
while ((line = readLine()) != null) {
//...
}
甚至
i = j = k = 0; // equal to: i = (j = (k = 0))
这是一个有争议的功能,因为它允许可能 的错误(例如您的错误)成功编译。为了缓解这种情况,有些人会反转操作数("yoda condition"):
if (Boolean.TRUE == mySuperBoolean)
这是有效的,因为如果我忘记了第二个等号,那么编译器将抛出一个错误,因为 Boolean.TRUE
是最终的,无法分配给。
我有这个代码...
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 的新手,但我知道单等号 (=) 用于赋值。双等号 (==) 用于检查对象是否指向内存中的同一位置。但是,在这种情况下,我不明白 'b' 是如何用单个等号打印的,但我知道将其更改为双等号不会打印出来
if (mySuperBoolean = Boolean.TRUE)
将 assign Boolean.TRUE 给你的 mySuperBoolean
变量并且条件将评估为真,因此无论你里面的是什么会一直执行
赋值运算符=
的结果将是赋值。所以 if (mySuperBoolean = Boolean.TRUE)
将始终评估为 true
.
本质上,这里发生的事情归结为:
if (Boolean.TRUE) {
System.out.print("b");
}
该赋值将 TRUE 放入变量,变量为布尔值,并检查其当前值,故事结束。
赋值是一个 expression,它解析为赋值的任何内容,在这种情况下,(mySuperBoolean = Boolean.TRUE)
是一个解析为 Boolean.TRUE
.
这实际上只在少数特定情况下有用。一种这样的情况是以下成语:
String line;
while ((line = readLine()) != null) {
//...
}
甚至
i = j = k = 0; // equal to: i = (j = (k = 0))
这是一个有争议的功能,因为它允许可能 的错误(例如您的错误)成功编译。为了缓解这种情况,有些人会反转操作数("yoda condition"):
if (Boolean.TRUE == mySuperBoolean)
这是有效的,因为如果我忘记了第二个等号,那么编译器将抛出一个错误,因为 Boolean.TRUE
是最终的,无法分配给。