了无尘 发表于 2012-5-17 04:02
谁说的对,或者好,并不重要,重要的是你学到东西,你的理解是什么?任何事情都要保持好奇心,尽管你觉得 ...
我的理解或者说我的判断的结果是根据汇编的运行顺序。
这里的x++ 和++x只是压入栈区的顺序不一样。
x++,会先将数据压入栈顶,然后在将变量自加。
这样栈顶的元素就不变。
++x,会先进行自加,再去压入栈顶。
这样就导致了为什么会出现一个会加1 而另一个没有加1.
至于栈区这些就是数据结构的知识了。
而当需要数据的时候用又将变量压入栈区。这就是为什么 x++ +x++;
中的第二个x的值会等于x+1.
还有就是你的这句代码:- System.out.println(x++ + 1);
复制代码 你的这句代码:你说会被解释成: x+1 x++;
但是我认为会是x先自加1,再去和1相加。
因为根据反汇编过来的代码看出:- 0: bipush 6
- 2: istore_1
- 3: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
- 6: iload_1
- 7: iinc 1, 1
- 10: iconst_1
- 11: iadd
- 12: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
- 15: return
复制代码 这里的add方法是最后执行的。
本人认为当弄懂了这些个底层的东西。这些所谓的++x和x++。
还有那些个莫名其妙的题目都是浮云吧!之所以现在出这么多的问题。
就是大家都只是存在理解上面。根本没有去知道计算机真正底层是怎么去实现的。
个人意见。谢谢! |