论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 65873 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-29  
fengchong719 写道
你要知道String s = new String('1111');是生成了两个对象。
下面用你的那个for来说,假设len = 5;
for(int i=0;i<array.len;i++){
  String s = array[i];//你在这里生成了5个对象,开辟一段内存
}
评审官的方法
String s = null;//此次生成一个对象,开辟一段内存
for(int i=0;i<array.len;i++){
   s = array[i];//他这里一个都没有成功
}
不过其它对于这个for还是没有什么大问题,如果是java的话,它的垃圾回收机制,会在你每完成一次for语句块的时候,就把s销毁了。


这个就是学了半吊子的悲剧啊

String s = array[i];//你在这里生成了5个对象,开辟一段内存
你的java老师应该表示鸭梨很大。

String s = array[i];// 这里一个对象都没有生成,只是改变引用地址
String s = new String();//这里生成一个对象
String s = new String("aaaa");//这里生成两个对象

至于为啥,回去好好学习基础吧。自己没搞清楚也就罢了,还出来误导人,中国式的杯具!!!
0 请登录后投票
   发表时间:2010-07-29  
djsl6071 写道
XTU_xiaoxin 写道
ysongcn 写道
没有new,跟堆没有关系。

另外,楼主的代码是 array 不是 List。大牛们在讨论什么重复调用啊,迷糊死了。arr.length 本身就是个int型的数,又不是方法调用。

另外,字节码威武。

提醒楼主,按回帖内容来看,本楼很多朋友都比较像你的评审员,你小心了。


看了大家的回帖以及提供的字节码,我大致明白是怎么回事了,看来javaeye上高手如云啊



看了大家的答复,javaeye上其实菜鸟无数...

arr.length不是方法调用吗?跟java中的其它变量比,也许不是吧,但跟c比起来,耗时上就不好说了,能一次使用局部变量,还是用的好。


你确定不是在说size()吗?
0 请登录后投票
   发表时间:2010-07-29  
隐藏吧,这帖子,没意义。你不懂java你就承认,死要面子非要扯淡误导别人,何必呢?我建议大家来投隐藏,免的一些人的扯淡误导别人。
0 请登录后投票
   发表时间:2010-07-29  
dennis_zane 写道
隐藏吧,这帖子,没意义。你不懂java你就承认,死要面子非要扯淡误导别人,何必呢?我建议大家来投隐藏,免的一些人的扯淡误导别人。


这个提议是不错,不过要可怜楼主被扣分,而且下次发帖还要填啥“论坛须知”,那个很杯具
0 请登录后投票
   发表时间:2010-07-29  
linliangyi2007 写道
dennis_zane 写道
隐藏吧,这帖子,没意义。你不懂java你就承认,死要面子非要扯淡误导别人,何必呢?我建议大家来投隐藏,免的一些人的扯淡误导别人。


这个提议是不错,不过要可怜楼主被扣分,而且下次发帖还要填啥“论坛须知”,那个很杯具



应该给以讹传讹的人扣分,关楼主什么是啊!
0 请登录后投票
   发表时间:2010-07-29  
其实重点是在垃圾回收这里
0 请登录后投票
   发表时间:2010-07-29  
linliangyi2007 写道
ywgoal 写道
都闲得蛋痛!!中国牛人多,怎么看牛的程序,软件,计算机都是人家老外牛啊~~~


你的评价太崇洋了,没有依据啊。你没看到QQ比MSN牛,华为在很多技术上已经赶超思科!!

像你这种啥都不想最求精致的人,才是导致中国软件落后的罪魁。

鸭梨很大啊,所以cisco现在四处收购其他业务。
0 请登录后投票
   发表时间:2010-07-29  
wyb222 写道
哥看这么多人要隐藏,哥投良好了

哥来晚了.....
0 请登录后投票
   发表时间:2010-07-29  
抛出异常的爱 写道
wyb222 写道
哥看这么多人要隐藏,哥投良好了

哥来晚了.....


专程来膜拜异常哥
0 请登录后投票
   发表时间:2010-07-29  
iamlotus 写道
IrenBJ 写道
1.有人说将数组长度在循环外先计算,如果要计较这一点点内存的话,实际上在编译成class文件的时候都只是计算一次,编译后都是数字了,放在循环外计算长度岂不多加了一个临时变量?
2.用for each的方式循环数组只是对适用于只读数组的操作,对于需要修改数组值的话建议还是用原始的for循环,即LZ所使用的方式。
以上是我的个人意见,综上所述,LZ的代码已经接近完美了。


想当然了吧,javac只会把final static的常量替换,这个length是不会替换的。看看bytecode就明白了。

bytecode也不是“真”的。JVM的JIT会做进一步优化(本地代码优化到什么效率,这要看机器码了)
0 请登录后投票
论坛首页 Java企业应用版

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