为什么java的赋值语句执行效率这么高

lihanchenhz 2012-04-23 11:15:24
在MyEclipse10里执行以下代码瞬间就执行完成了
char a='a';
char b;
for (int j=1;j<=10000;j++){
for (int i=1;i<=1000;i++)
b=a;
for (int i=1;i<=1000;i++)
for (int k=1;k<=i+1000;k++)
b=a

同样的代码在VisualStudio2010里用C++执行要用近40秒

谁知道为什么这个效率这么高?
一百万条赋值语句瞬间完成
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
VanBaston 2012-04-24
  • 打赏
  • 举报
回复
C++的字符串赋值好像是要在堆中要给b分配空间,然后将a拷贝到b,在吧地址给栈中的b。
而java是直接将a的引用赋值给栈中的b。
这里可以看出来C++中多了一个给b在堆中分配空间及赋值的操作,而且在堆中的操作要比在栈中的操作慢很多的。
aotian16 2012-04-24
  • 打赏
  • 举报
回复
这还真不是很了解
龙四 2012-04-24
  • 打赏
  • 举报
回复
java在运行时会做优化的,在不同的jvm实现上跑出的结果可能差别很大的
lihanchenhz 2012-04-24
  • 打赏
  • 举报
回复
但是据我所知java里String是引用数据类型,但是char不是应该是基本数据类型嘛
基本数据类型的复制难道不是开辟空间,然后直接复制过去的?
dqsweet 2012-04-23
  • 打赏
  • 举报
回复
C++中的字符串赋值操作,要给b分配空间,然后将a拷贝到b;
而java的操作,是将a对象的地址赋给b;
当然速度就快多了。
lihanchenhz 2012-04-23
  • 打赏
  • 举报
回复
以下代码也是瞬间完成
char b;
for (int j=1;j<=10000;j++){
for (int i=1;i<=1000;i++)
b=a;
for (int i=1;i<=1000;i++)
for (int k=1;k<=(i+1000)/3;k++){
b='a';
b='b';
b='c';
}
}

排除了编译器自动去除无意义赋值的可能

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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