表达式j + = j- = j * j和j + = j * = j- = j的结果和解析结果是什么? (多个等于)

时间:2017-05-26 01:51:08

标签: java

这个表达式是从左到右解析的吗?我试图解释解析后的结果,但最后的结果是错误的。

int j=10, k=10; 
j+=j-=j*=j;   //j=j+(j-=j*=j)=j+(j-j*j)
k+=k*=k-=k;   //k=k+k*k-k;
System.out.println(j+";"+k);

2 个答案:

答案 0 :(得分:3)

分配从右到左解析。你表达的方式

j+=j-=j*=j; 

作为

j=j+(j-j*j);

是正确的,但操作顺序可能更好地表达为:

j=j+(j-(j*j)));

同样,您可以将涉及k的赋值重写为:

k=k+(k*(k-k));

-80和10分别是正确的答案。

答案 1 :(得分:2)

我试图通过每个步骤更清楚地了解变量的确切情况。

请记住,结果是从右到左解析的。

  int j=10, k=10;

  j += j -= j *= j;
//          j *= j   ---> j = 10*10 = 100
//j += j -= 100
//     j -= 100      ---> j = 10-100 = -90
//j += -90           ---> j = 10+(-90) = -80
//j = -80

  k += k *= k -= k;
//          k -= k   ---> k = 10-10 = 0
//k += k *= 0
//     k *= 0        ---> k = 10*0 = 0
//k += 0             ---> k = 10+0 = 10
//k = 10

  System.out.println(j+";"+k); //Prints -80;10