这句表达式是怎么回事?

ismallboy 2016-09-10
int i = 12;
System.out.println(i += i -= i *= i);
输出是多少?为什么会这样呢?这里不是应该从右往左看,然后i是基础类型,先计算i*=i,过程先不管,结果应该和i = i * i 一样的,也就是说i变成了124,那理所应当前面还没计算的两个i也同时编程了124才对啊,毕竟他们几个i是共享一个内存的,也就是说是同一个东西,这究竟是怎么回事?
ww4856156 2016-09-14
int i = 12;
int j = i,k = i;
System.out.println(i*=i);
System.out.println(i=j-=i);
System.out.println(k+=i);

不解释大概意思就这样

回归蔚蓝 2016-09-14
你知道的
i = 12; System.out.print ( i++ );System.out.print ( i );
结果是 1213
i = 12; System.out.print ( ++i );System.out.print ( i );
结果是1313
赋值也一样,赋值语句是当前语句结束后赋值
所以 i += i -= i *= i 展开后是 i = i + (i = i - (i = i * i))
在本语句结束前i的值都不会变,所以就是 i = 12 + 12 - 12 * 12

i *= i 在语句结束前都只是一个表达式,只有语句完整的计算结束后才有赋值的意义
Global site tag (gtag.js) - Google Analytics