锁定老帖子 主题:代码难道不是这么写的?
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-27
我记得好像是老版本建议写外面,1.4以后优化了写里面更好
|
|
返回顶楼 | |
发表时间:2010-07-27
完全是在扯淡,重复的只是申明的引用,而且只是占用栈,根本不会占用堆空间。更何况jvm是做过优化的,完全可以清楚
|
|
返回顶楼 | |
发表时间:2010-07-27
for loop外不需要用到的当然在loop里定义。
这样代码示例到处都是。 骂你的人out了。 如果他是你的直接上级,你要想一想如何不伤他面子让他知道他错了。 不然你被打上"不会编程的标签",很难混的。 |
|
返回顶楼 | |
发表时间:2010-07-27
遇到过跟你类似的情形,在搞一个flex项目时,有同事跟我说as3里不能在循环体内定义对象,否则会额外创建出大量对象影响性能。我对此深表怀疑,但他资历比较老所以整个项目组的人都按他说的写。。
|
|
返回顶楼 | |
发表时间:2010-07-27
我觉得第一种写法更清晰一点,而且又不是new对象,为什么会占用大量堆内存?
|
|
返回顶楼 | |
发表时间:2010-07-28
J-catTeam 写道 vvggsky 写道 评审的说的没错,重复多建了许多对象
不过也没太大区别 没有重复创建,只是重复申明,不存在多余内存消耗的问题。 哈哈! 说真的,楼主的写法更科学! 他有效地控制了变量的作用域,防止命名冲突和变量错误引用. |
|
返回顶楼 | |
发表时间:2010-07-28
这种事情是要看情况而定的
不能一概而论 1.for(int i = 0;i<arr.len;i++) { 2. A a = arr[i]; 3. System.out.println(s); // s? 当它不存在吧 4. } 上面这样做的优点是 缩小了引用A的作用范围. 1.A a = null; 2.for(int i = 0;i<arr.len;i++) { 3. a = arr[i]; 4. System.out.println(s); 5.} 这样做的话 , 只声明了一次. 但是在一些特殊情况下 比如 所在的函数很长, 需要执行很多的时间. 那么,a变量将一直指向arr[arr.len-1],又恰好 arr[arr.len-1]在后来某操作 而被弹出了arr数组.也就是从arr数组中被删除了. 但是a还没有过期,所以即使GC在这段时间内工作了,这个对象也不会被回收. 大概就是如此,也不算是问题,除非极特殊,这个A对象是否回收对系统有相当大的影响. 所以评审这种代码是很无聊的. 评审的时候找出一代码潜在问题, 重新组织代码的结构远比要纠结这种问题有意义的多 |
|
返回顶楼 | |
发表时间:2010-07-28
中国就是这类所谓的牛人太多了,最近我还听到有“牛”人开始宣扬设计模式无用论。
不知道是咱们国家的牛人生于计算机发明之前,还是由于太自我感觉良好了! 这种人的心态就如同唐某某的那种信口开河,认为敢于说就可以标新立异。 |
|
返回顶楼 | |
发表时间:2010-07-28
团队保持一种习惯是需要的
除非当这种习惯称为瓶颈的时候 好的团队写出的代码基本是一样的 |
|
返回顶楼 | |
发表时间:2010-07-28
for(int i = 0;i<arr.len;i++) {
A a = arr[i]; System.out.println(s); } 这样写,是不会在堆内存里分配对象了。A a,只是局部变量,在栈内存里分配,是一个对象的引用而已,在循环体内,就多了arr.len个变量,消耗的是栈内存。 |
|
返回顶楼 | |