影响java中运算符优先级的括号

影响java中运算符优先级的括号,java,Java,我的理解是括号内的表达式首先将d设置为3 因此,上述表达式等价于 d=3 d+=3,应为6。 java如何将其评估为12 d首先计算为9,当您将其更改为3时,快捷方式add运算符将新的d值(3)与旧的d值(9)相加 class test8{ static public void main(String args[]){ int d = 9; d += d = 3; System.out.println (d); } } 第一个d=

我的理解是括号内的表达式首先将d设置为3

因此,上述表达式等价于 d=3 d+=3,应为6。
java如何将其评估为12

d首先计算为9,当您将其更改为3时,快捷方式add运算符将新的d值(3)与旧的d值(9)相加

class test8{
    static public void main(String args[]){
        int d = 9;
        d += d = 3;
        System.out.println (d);
    }
}
第一个d=9。然后d+=d=3,这意味着:

int d = 9;
d += d = 3;

因此,让d等于9加3,也就是12。

与其他语言一样,Java中的偏执有着非常重要的作用,这就是为什么你会因为没有注意而遇到一些问题

您可能会看到这行代码:

Let `d` equal to `d` plus the result of `d=3`.  
                  ^                      ^
                  9                      3
作为:

第一个d来自+=运算符,第3个来自表示d=3,您的表达式是d+=d=3

evaluate+=表达式,它是d=d+d=3的快捷方式 计算d+d=3表达式以对其进行计算首先计算值为9的左侧d,然后计算右侧d 评估d=3,其值为3且有副作用 继续步骤2,我们有9+3 5赋值d=12,用于擦除先前的d值
我看不到您在发布的代码中提到的括号。int d=9;9+3 = 12. 括号在哪里?我试过d+=d=3,结果是12。我很清楚这一点。我也试过d+=d=3。理想情况下,应首先计算括号中的子表达式,因为括号具有最高优先级。所以,这一个转化为d=3;d+=3;我试过d+=d=3,结果是12。我很清楚这一点。我也试过d+=d=3。理想情况下,应首先计算括号中的子表达式,因为括号具有最高优先级。所以,这一个转化为d=3;d+=3;这应该给出d=6。好吧,你是对的。偏执先被评估,但在初始化之后。这就是为什么d1+=d2=3你首先评估属性,然后是偏执。我的意思是,JVM首先看到d将被评估为某个东西,让我们记住这一点,然后在它经过时看到:嗯,我有一个最好对其进行评估[评估结果为3],然后执行操作,如果支持,则尝试d+=d=3,结果为12。我很清楚这一点。我也试过d+=d=3。理想情况下,应首先计算括号中的子表达式,因为括号具有最高优先级。所以,这一个转化为d=3;d+=3;这不是一个普通的操作。将其排序为int tmp=d;d=tmp+d=3
  d += d = 3;
 d = d + 3