问题描述
publicstaticvoidmain(String[]args){intj=0;for(inti=0;i<100;i++){j=j++;}System.out.println(j);}执行结果是:0解释:执行的顺序是:temp=j;j=j+1;j=temp我想问下这个temp中间变量在执行的时候是不是真是存在的?为什么会是这个执行顺序呢?我一直理解为执行顺序为两步;j=j;j++,到底是怎么了???我反编译.class文件,也没有看到类似temp的变量存在啊?我想知道在堆栈中是如何执行的,跪求大神解释
解决方案
解决方案二:
和你贴的代码不匹配吧
解决方案三:
你见过C++的后缀自增运算符的重载代码吗?某种程度上temp是确实存在的。
解决方案四:
这个问题不注意还真不大容易弄明白。这其实是一个运算符的优先级问题。temp的这个数值肯定存在,但不是你说的那样temp=j;=号的优先级低于++,就是说要先计算++后才会进行=号的计算。“=”计算符原理是将右边的表达式的值赋值给左边的表达式。左边的表达式是j,而右边的表达式是j++;程序先计算右边表达式的值:最开始,j的初始值为j=0;因为++运算符置于变量的后面,说明这个++运算符的计算在整个表达式结果计算出来后。所以此时程序不会去执行++计算,而是去先计算整个表达式的值,因为整个表达式就j一个变量,所以整个表达式的值就是j的值,此时j的值为0;及整个右边的表达式的值为0;此时程序已经计算出整个右边的表达式的值了,此时程序会将这个值存储起来,即用一个temp记录此时右边表达式的值0,temp=0;因为j已经参加完表达式的计算,然后进行++的操作,即j自增。此时j=j+1;即j=1;然后由于运算符优先级的问题,此时才会计算=号运算符,即将右边表达式的值(temp=0)赋值给左边表达式,即此时运行j=temp;而temp=0;所以此时j=0;即最终j的值为0