本帖最后由 dustookk 于 2012-12-30 15:52 编辑
看不下去了.... 楼主 你的问题 并没有解决 , 楼下几个同学也都没有意识到这个小小的tmp=tmp++的精髓.
看这么一段代码,你们认为输出是多少?- public class TinyTest {
- public static void main(String[] args) {
- int i = 0;
- i = i++;
- System.out.println(i);
- }
- }
复制代码 结果是: 0
但原因肯定不是楼下几位说的"先赋值后自增" ("先赋值后自增"的结果还不是自增) 而是:
让我们先用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++; 这样的句子
|