原链接在这里 :<题目连接>
a+++a等同于(a++)+a,而 a+a++等同于a+(a++),二者结果为什么不一样?
简而言之就是处理顺序不一样
a+++a的入栈会被编译器分解成(a++)+a ,入栈的时候,编译器首先识别a++,这时候a自增。值和原来的相比较就是a(新)=a(旧)+1
而下一个入栈的是a,此时的a已经完成了自增,是a(新)
也就是说
a+++a=(a++)+a=(a(旧)+1)+a(新)=(a(旧)+1)+(a(旧)+1)=2a(旧)+2
那看一下另一个
a+a++的入栈被编译器分解成a+(a++),入栈的时候,编译器先识别的是a,然后再识别a++。
a+a++=a+(a++)=a(旧)+(a(旧)+1)=2a(旧)+1
现在我们看下2个结果
一个是2a(旧)+2
另一个是2a(旧)+1
当然不一样。