在Java中,為什么b == (b = a)這段代碼在多線程環(huán)境不總是返回true?a可以被多個線程修改。b初始化為b = a在打印b == (b = a)時,結(jié)果卻不一定為true??墒牵僮鞣膬?yōu)先級不是先b = a再b == b嗎?代碼如下:public class Demo implements Runnable{ public static double a = 0; @Override
public void run() {
a = Math.random()*100; double b = a;
System.out.println(b == (b = a));
} public static void main(String args[]) { for(int i=0;i<10;i++) { new Thread(new Demo()).start();
}
}
}打印結(jié)果:falsetruetruetruefalsetruefalsetruetruetrue
1 回答

紅顏莎娜
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個贊
b==b并不是直接比較兩個b,而且會先把b放到寄存器中,然后比較兩個寄存器中的值。在將第二個b放入寄存器的時候,b可能會被修改。
添加回答
舉報
0/150
提交
取消