++i;i++;i+=1;i=i+1内存分析

农民工刘小二 2010-09-10 04:59:38
大虾们,谁帮我分析一下呀
...全文
203 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chifee 2010-09-13
  • 打赏
  • 举报
回复
如果编译出来的都是同一个指令,那么内存操作都是一样的,查一下IINC这条指命不就知道了
农民工刘小二 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 youjianbo_han_87 的回复:]
用Java还管内存啊,没事干啊。。。。。。。。。
[/Quote]
面试不能这么回答呀
hongboyongqi 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ituren 的回复:]
引用 2 楼 chifee 的回复:

写一个简单的测试就可以了。
Java code

public void test(){
int i = 0;
++i;
i++;
i+=1;
i = i+1;
}


编译之后,查看一下class文件,可以发现指令都是
Java code

iinc 1 1 [i]


所以如果没有赋值………
[/Quote]
这里出错的原因仅仅是因为类型转换
龙四 2010-09-11
  • 打赏
  • 举报
回复
至于效率,不同的jdk也是不尽相同的

假如在sun的jdk上某个操作最快,我也可以来写一个jdk,把这个操作可以搞的最慢,实在要看具体实现了
龙四 2010-09-11
  • 打赏
  • 举报
回复
不同的jdk实现可以有不同的内存分配方式,只要是按照jvm规范和java语言规范来实现即可
sun、ibm、hp的jdk可能就不一样的实现
youjianbo_han_87 2010-09-11
  • 打赏
  • 举报
回复
用Java还管内存啊,没事干啊。。。。。。。。。
ZangXT 2010-09-10
  • 打赏
  • 举报
回复
效率一样。
农民工刘小二 2010-09-10
  • 打赏
  • 举报
回复
也就是这几个的运行效率的顺序 并解释为什么
农民工刘小二 2010-09-10
  • 打赏
  • 举报
回复
感谢各位的帮忙,我想问的是这几个在运行时内存的分配是怎样的
农民工刘小二 2010-09-10
  • 打赏
  • 举报
回复
感谢各位的帮忙,我想问的是这几个在运行时内存的分配是怎样的
ituren 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chifee 的回复:]

写一个简单的测试就可以了。
Java code

public void test(){
int i = 0;
++i;
i++;
i+=1;
i = i+1;
}


编译之后,查看一下class文件,可以发现指令都是
Java code

iinc 1 1 [i]


所以如果没有赋值……
[/Quote]

short s=1;
s=s+1;//出错.
s+=1;//正确.



chifee 2010-09-10
  • 打赏
  • 举报
回复
写一个简单的测试就可以了。

public void test(){
int i = 0;
++i;
i++;
i+=1;
i = i+1;
}

编译之后,查看一下class文件,可以发现指令都是

iinc 1 1 [i]

所以如果没有赋值语句的话,以上+1方式是完全等同的。
wangqiang_lenovo 2010-09-10
  • 打赏
  • 举报
回复
++i, 计算完之后 再使用i的值
i++,先使用i的值,之后在进行计算操作
i+=1 仍然是一个变量 ,只是改变了变量的值
i=i+1 创建了一个新的变量,i引用新的变量。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧