论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 66518 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-28  
icanfly 写道
maodiesky 写道
我若是评审会叫你这么改
int arrLen = arr.len;
for(int i = 0;i<arrLen ;i++) {
  A a = arr[i];
  System.out.println(s);
  }

这个没有多大影响吧

+1
0 请登录后投票
   发表时间:2010-07-28  
Cindy_Lee 写道
我有点迷惑,比如:
String a = {"a","b","c"};
for(int i=0;i<a.length;i++){
    System.out.println(a[i]);
}
以上这段代码是否要改成:
String a = {"a","b","c"};
int len = a.length;
for(int i=0;i<len;i++){
    System.out.println(a[i]);
}
这样改的意义何在?a.length只是一个属性而已,在内存里应该已经分配了指定的空间来装载,就算你每次调用a.length也只是掉用同一个内存区域而已,为何会出现重复计算?高手请指教

应该是按照第一种方式写。
原因也基本是这个原因。
如果自己写个类似于get**()的函数,也应该是调用函数,java编译器会自动以内联的方式调用。
0 请登录后投票
   发表时间:2010-07-28  
不是想怎么写就怎么写 一个项目不是从头到尾都是一个人干的 永远要记住你们是一个团队 一个好的团队写出来的代码应该是一样的
0 请登录后投票
   发表时间:2010-07-28  

for(int i = arr.len - 1;i >= 0 ;i--) {
  A a = arr[i];
  System.out.println(s);
  }

当初去面试一家手机游戏的公司,这个 就是其中的一个面试题的答案,

我也是这么写的,然后面试官给我说

手机编程 面临的最大问题就是内存很小的问题,所以能优化就优化,能少占内存就少占内存
0 请登录后投票
   发表时间:2010-07-28  
评审官绝对的是个傻逼!鉴定完毕。不过这种郁闷的事情太多了……
0 请登录后投票
   发表时间:2010-07-28  
  楼主是对的
A a 写在for loop里面最多就增加一个引用 不会新建对象
0 请登录后投票
   发表时间:2010-07-28  
1.有人说将数组长度在循环外先计算,如果要计较这一点点内存的话,实际上在编译成class文件的时候都只是计算一次,编译后都是数字了,放在循环外计算长度岂不多加了一个临时变量?
2.用for each的方式循环数组只是对适用于只读数组的操作,对于需要修改数组值的话建议还是用原始的for循环,即LZ所使用的方式。
以上是我的个人意见,综上所述,LZ的代码已经接近完美了。
0 请登录后投票
   发表时间:2010-07-28  
IrenBJ 写道
1.有人说将数组长度在循环外先计算,如果要计较这一点点内存的话,实际上在编译成class文件的时候都只是计算一次,编译后都是数字了,放在循环外计算长度岂不多加了一个临时变量?
2.用for each的方式循环数组只是对适用于只读数组的操作,对于需要修改数组值的话建议还是用原始的for循环,即LZ所使用的方式。
以上是我的个人意见,综上所述,LZ的代码已经接近完美了。


想当然了吧,javac只会把final static的常量替换,这个length是不会替换的。看看bytecode就明白了。
0 请登录后投票
   发表时间:2010-07-28  
其实我以前一直都认为评审官那样做会好一点

后来看了java的一些关于GC的内容,貌似像前者那样创建会不利于GC的回收,因为GC优化推荐的是短生命周期的变量,这样重复利用一个引用会导致GC变得笨拙,不利于GC对该对象的回收,在GC优化策略里面,是不推荐一些所谓的避免重复声明的行为的

如:在很多人写的代码里面,都会创建一个String temp;
然后重复利用该声明,一个函数从头到尾存放临时的String都使用该声明

这样做,是不推荐的,会导致该变量的生命周期过长,,最后GC就可能不回收了


后来就一直像楼主那样写了
0 请登录后投票
   发表时间:2010-07-28  
在java中,以上两种方式内存消耗并没有很大的区别。java的垃圾回收器会帮你做好回收内存的工作...不过 ,,对于作用域 在for里面的变量只能在for里使用,
0 请登录后投票
论坛首页 Java企业应用版

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