这个表达式是从左到右解析的吗?我试图解释解析后的结果,但最后的结果是错误的。
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);
答案 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