| 本帖最后由 dustookk 于 2012-12-30 15:52 编辑 
 看不下去了....  楼主 你的问题 并没有解决 , 楼下几个同学也都没有意识到这个小小的tmp=tmp++的精髓.
 
 看这么一段代码,你们认为输出是多少?
 结果是: 0复制代码public class TinyTest {
    public static void main(String[] args) {
        int i = 0;
        i = i++;
        System.out.println(i);
    }
}
 但原因肯定不是楼下几位说的"先赋值后自增" ("先赋值后自增"的结果还不是自增) 而是:
 
 让我们先用javap -c命令看看就知道了:
 不好理解的话 我画了张图:复制代码public static void main(java.lang.String[]);
Code:
 0:   iconst_0     //0放到栈顶
 1:   istore_1    //把栈顶的值保存到局部变量1,也就是i中
 2:   iload_1     //把i的值放到栈顶,也就是说此时栈顶的值是0
 3:   iinc    1, 1  //注意这个指令,把局部变量1,也就是i,增加1,这个指令不会导致栈的变化,也就是说局部变量1,即i此时为1了。
 6:   istore_1     //把栈顶的值(0)保存到局部变量1,也就是让i为0了,所以最后i为0
 
   
 
 
 这个问题提醒我们:
 
 切忌使用 i=i++; 这样的句子
 
 
 |