簡體   English   中英

增量和減量不起作用

[英]Increment and decrement doesn't work

為什么這段代碼的結果是0和1? 有人可以解釋這段代碼嗎?

如何改變條件的結果: if (b = !b)truefalse之間?

碼:

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 = !bbtrue更改為false ,反之亦然。

if (b = !b) b被賦值為trueif (b = !b)true true

因此,運行此條件是循環將bfalse替換為true並且還交替if條件的結果。

雖然其他人已經提供了答案,但我會試着深入解釋這里發生了什么。

當你這樣做時:

if(b = !b)

如果btrue ,則表達式將被計算為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM