锁定老帖子 主题:代码难道不是这么写的?
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间: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 |
|
返回顶楼 | |
发表时间: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编译器会自动以内联的方式调用。 |
|
返回顶楼 | |
发表时间:2010-07-28
不是想怎么写就怎么写 一个项目不是从头到尾都是一个人干的 永远要记住你们是一个团队 一个好的团队写出来的代码应该是一样的
|
|
返回顶楼 | |
发表时间:2010-07-28
for(int i = arr.len - 1;i >= 0 ;i--) { A a = arr[i]; System.out.println(s); } 当初去面试一家手机游戏的公司,这个 就是其中的一个面试题的答案, 我也是这么写的,然后面试官给我说 手机编程 面临的最大问题就是内存很小的问题,所以能优化就优化,能少占内存就少占内存 |
|
返回顶楼 | |
发表时间:2010-07-28
评审官绝对的是个傻逼!鉴定完毕。不过这种郁闷的事情太多了……
|
|
返回顶楼 | |
发表时间:2010-07-28
楼主是对的
A a 写在for loop里面最多就增加一个引用 不会新建对象 |
|
返回顶楼 | |
发表时间:2010-07-28
1.有人说将数组长度在循环外先计算,如果要计较这一点点内存的话,实际上在编译成class文件的时候都只是计算一次,编译后都是数字了,放在循环外计算长度岂不多加了一个临时变量?
2.用for each的方式循环数组只是对适用于只读数组的操作,对于需要修改数组值的话建议还是用原始的for循环,即LZ所使用的方式。 以上是我的个人意见,综上所述,LZ的代码已经接近完美了。 |
|
返回顶楼 | |
发表时间:2010-07-28
IrenBJ 写道 1.有人说将数组长度在循环外先计算,如果要计较这一点点内存的话,实际上在编译成class文件的时候都只是计算一次,编译后都是数字了,放在循环外计算长度岂不多加了一个临时变量?
2.用for each的方式循环数组只是对适用于只读数组的操作,对于需要修改数组值的话建议还是用原始的for循环,即LZ所使用的方式。 以上是我的个人意见,综上所述,LZ的代码已经接近完美了。 想当然了吧,javac只会把final static的常量替换,这个length是不会替换的。看看bytecode就明白了。 |
|
返回顶楼 | |
发表时间:2010-07-28
其实我以前一直都认为评审官那样做会好一点
后来看了java的一些关于GC的内容,貌似像前者那样创建会不利于GC的回收,因为GC优化推荐的是短生命周期的变量,这样重复利用一个引用会导致GC变得笨拙,不利于GC对该对象的回收,在GC优化策略里面,是不推荐一些所谓的避免重复声明的行为的 如:在很多人写的代码里面,都会创建一个String temp; 然后重复利用该声明,一个函数从头到尾存放临时的String都使用该声明 这样做,是不推荐的,会导致该变量的生命周期过长,,最后GC就可能不回收了 后来就一直像楼主那样写了 |
|
返回顶楼 | |
发表时间:2010-07-28
在java中,以上两种方式内存消耗并没有很大的区别。java的垃圾回收器会帮你做好回收内存的工作...不过 ,,对于作用域 在for里面的变量只能在for里使用,
|
|
返回顶楼 | |