论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 65874 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-28  
如果数组在你那个循环结束之后不会再用到了,你应该加上“a=null;”以便可以让垃圾收集器尽早收集数组arr占用的内存,多这样做的话可以显著提高系统性能。
0 请登录后投票
   发表时间:2010-07-28  
Ulysses 写道
maodiesky 写道
我若是评审会叫你这么改
int arrLen = arr.len;
for(int i = 0;i<arrLen ;i++) {
  A a = arr[i];
  System.out.println(s);
  }

for(int i = 0,int arrLen = arr.len;i<arrLen ;i++) {
  A a = arr[i];
  System.out.println(s);
  }

这样更好


for(int i = 0,  arrLen = arr.len; i < arrLen; i++) {
    A a = arr[i];
    System.out.println(s);
}
这样更好
0 请登录后投票
   发表时间:2010-07-28   最后修改:2010-07-28
magicbu 写道
这段代码最大的问题不是在这一句吗
i<arr.len
长度应该首先被变量保存,避免重复计算~

同意。。但是也视情况而定吧 如果在代码段里对数组做了增删操作的话 还是用arr.len比较好 呵呵。。
0 请登录后投票
   发表时间:2010-07-28  
个人编程习惯A基本不影响;arr.len通常不建议这么写;呵呵,别太往心里去楼主,也许评审的同事对java理解不深
0 请登录后投票
   发表时间:2010-07-28  
我也觉得评审没错,你这样有点浪费
0 请登录后投票
   发表时间:2010-07-28  
什么a=null会更快,有什么依据,什么arr.length重复计算影响性能,都是扯淡,楼主的代码已经可以了。
在任何时候,你要想办法缩减变量的作用域,而不是扩大。
0 请登录后投票
   发表时间:2010-07-28  
我只对s感兴趣!!!
0 请登录后投票
   发表时间:2010-07-28  
weiqiang.yang 写道
我觉得第一种写法更清晰一点,而且又不是new对象,为什么会占用大量堆内存?



看以好几个人都说不可以在for循环里new对象,

请问,下面的代码要怎么样子来改写?

for(int i=0;i<list.size();i++){
    Object[] obj = (Object[]) list.get(i);
    A a = new A();
    a.setXxx((String) obj[0]);
    a.setXxx((Long) obj[1]);
}

谢谢!
0 请登录后投票
   发表时间:2010-07-28  
第一种:在方法结束后,A变量等等待回收。
第二种:for每循环一次,定一个变量并在当次循环结束后等待回收。
0 请登录后投票
   发表时间:2010-07-28   最后修改:2010-07-28
yilong511 写道
第一种:在方法结束后,A变量等等待回收。
第二种:for每循环一次,定一个变量并在当次循环结束后等待回收。


A只是个引用,它每次循环指向不同的对象,每次循环之后,它指向的对象变了,原来的对象去哪了?还在那,只不过计数减一,根本没区别。反而第一种方法扩大了A的作用域,这是很不好的实践,C程序员的思维。
0 请登录后投票
论坛首页 Java企业应用版

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