为了账号安全,请及时绑定邮箱和手机立即绑定

在Java并发环境下,为什么b == (b = a)不总是true?

在Java并发环境下,为什么b == (b = a)不总是true?

湖上湖 2018-10-24 16:58:14
在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();          }      }      }打印结果:falsetruetruetruefalsetruefalsetruetruetrue
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

b==b并不是直接比较两个b,而且会先把b放到寄存器中,然后比较两个寄存器中的值。在将第二个b放入寄存器的时候,b可能会被修改。

查看完整回答
反对 回复 2018-10-24
  • 1 回答
  • 0 关注
  • 558 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信