精辟的来了,先求给分啊。
用堆栈来解释是最恰不过的了。
首先,JVm 会在内存中开辟出一个栈出来,由于这里没有太明确的牵扯到对象的概念,暂不谈堆的问题。
当运行到i=i++之前,在堆中存储的i=10,然后在堆中又开辟了一个临时空间来运行i++.
在这里你可以将i++理解为一个方法,并标记第一个i 为i1,第二个为i2,也就是在这个方法内先将i2赋值给了i1,然后再i2+1,但加完以后并没有赋给i1变量进行存储,另外这里的i1,i2与i为同一地址,也就是说i1,i2变了i也会变.然后方法出栈,整个过程中i始终没变 ,仍为10;
|