说实话,这道题的刁钻程度称得上面试级的了。
我刚才自己写了点代码才算搞明白了。
int a=5;
System.out.print(a+(a=1));
这样结果是6
int a=5;
System.out.print((a=1)+a);
这样结果是2
这说明解释器加载顺序是从左到右的。
再看LZ的问题。
b + ( b = a ) - b
括号最先被执行,前面一个b是被加载之前b的原始值,后面一个b最后加载,是括号里赋值运算之后的值
也就是换句话说。
a = b + ( b = a ) - b ;
这个东西可以拆解为
a = 6 + (6 = 3) - 3;
结果就是b=3,a=6。
为了证明我之前的逻辑,我用Python跑了一下,不通过,然后用C语言跑了一下,结果错误。
说明通用性不是很强。