我有產生不同的輸出下面的兩段代碼:爲什麼這個布爾變量被賦值爲真?
boolean a = false, b = false, c = false, d = false;
if (a = false | (b = false) || (c = true) | (d = true)){
}
System.out.println("if (a = false | (b = false) || (c = true) | (d = true))");
System.out.printf("a=%b\nb=%b\nc=%b\nd=%b\n\n", a, b, c, d);
if ((a = false) | (b = false) || (c = true) | (d = true)){
}
System.out.println("if ((a = false) | (b = false) || (c = true) | (d = true))");
System.out.printf("a=%b\nb=%b\nc=%b\nd=%b\n", a, b, c, d);
當運行上面的代碼中,我得到以下輸出:
if (a = false | (b = false) || (c = true) | (d = true))
a=true
b=false
c=true
d=true
if ((a = false) | (b = false) || (c = true) | (d = true))
a=false
b=false
c=true
d=true
請注意,a
在第一個片段分配true
,但不在第二個。
爲什麼用圓括號包裝a
會產生這樣的差異?
請注意,我正在使用賦值運算符(=
)和而不是比較運算符(==
)故意使用。
@Eran我不想比較,我把它設置爲false。但爲什麼它變成了現實? –
@JohnE .:那你爲什麼要用if語句? – Stultuske
@Stultuske在if語句中賦值沒有任何問題。 –