论坛首页 Java企业应用论坛

JAVA基本数据类型运算的内存详解

浏览 9956 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-04-15  
schweigen 写道
自己javap 一下去看字节码,引用mathfox 的内容:

mathfox 写道
 
   7:	iload_1
   8:	iinc	1, 1
   11:	istore_1


上面三个操作就是j = j++; 这个语句的字节码。
1、将j 这个变量的值压入栈中
2、将j 自增1
3、将栈中的值返回给j

到底内存地址变了没有,自己观察。

如果是这样..那不是违背了, j=j++.是先赋值再进++的规则.而是先++再赋值?
难道先赋值再进++的规则,只是一个经验总结???照理说.你的分析是对的.毕竟是字节码.
  
0 请登录后投票
   发表时间:2010-04-15  
amoszhou 写道
2022228 写道
关键是这步操作 j++,jvm的内部处理究竟是什么样子的。可以另开帖请大牛解答。

这贴被投了18个隐藏贴,不知道je上的高人是不是传说中的多。


我觉得很奇怪...难道JE上的大牛真如传说中这么多? 投隐藏贴的人都已经很清楚了??? 那为什么不出帮我解答一下??

投隐藏贴已经是JE上那些NB的人的习惯了, 他们现在的感觉是, 每天不投个十个二十个隐藏贴批判一下别人就显示不出来自己的NB, 实际上只不过是自我感觉良好罢了, LZ不必理会他们


amoszhou 写道


如果是这样..那不是违背了, j=j++.是先赋值再进++的规则.而是先++再赋值?
难道先赋值再进++的规则,只是一个经验总结???照理说.你的分析是对的.毕竟是字节码.
  


我上个回复已经说了, ++发生的时间是在当前表达式计算完成之后紧接着进行, j = j++中 右侧是一个独立的表达式, j++的操作在右侧计算完成后发生, 而整个语句是个赋值语句, 当右侧的表达式计算完成后, 才会进行赋值操作.
0 请登录后投票
   发表时间:2010-04-15  
这什么例子啊,就是i++和++i的区别,怎么弄到内存上去了。误导观众。
换个例子吧,都没看你要说啥。
0 请登录后投票
   发表时间:2010-04-15  
简单问题复杂化,这个例子别扯上内存。
没有循环还不是一样?故意复杂化了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics