[英]Increment and decrement doesn't work
為什么這段代碼的結果是0和1? 有人可以解釋這段代碼嗎?
如何改變條件的結果: if (b = !b)
在true
或false
之間?
碼:
public class Atomicity extends Thread {
volatile static int i;
boolean b;
public void run() {
while (true) {
if (b = !b) i++;
else i--;
}
}
public static void main(String[] args) {
//new Atomicity().start();
new Atomicity().start();
while (true)
System.out.println(i);
}
}
b = !b
將b
從true
更改為false
,反之亦然。
if (b = !b)
b
被賦值為true
則if (b = !b)
求true
true
。
因此,運行此條件是循環將b
從false
替換為true
並且還交替if
條件的結果。
雖然其他人已經提供了答案,但我會試着深入解釋這里發生了什么。
當你這樣做時:
if(b = !b)
如果b
為true
,則表達式將被計算為true
並且將滿足if條件。
見JLS :
在運行時, 賦值表達式的結果是賦值發生后變量的值 。
但是在下一次迭代中, b
將為false
,然后將不滿足條件,因為賦值運算符將返回false
。
值得一提的是,強烈建議使用{
和}
即使是一行表達式。
您在if語句中使用賦值運算符:
if (b = !b) i++;
表達方式
b = !b
包含賦值運算符(=)而不是比較(==)。 該assigment給出了b的新值,並返回該新值。
現在的問題是你想做什么。 您當前的代碼將繼續切換b的值。 當然,在這里使用比較總是返回false(b ==!b),所以這也沒用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.