在Java中,为什么b == (b = a)这段代码在多线程环境不总是返回true?
a可以被多个线程修改。
b初始化为b = a
在打印b == (b = a)时,结果却不一定为true。
可是,操作符的优先级不是先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();
}
}
}
打印结果:
false
true
true
true
false
true
false
true
true
true
b==b并不是直接比较两个b,而且会先把b放到寄存器中,然后比较两个寄存器中的值。在将第二个b放入寄存器的时候,b可能会被修改。