论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 66460 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-27  
我记得好像是老版本建议写外面,1.4以后优化了写里面更好
0 请登录后投票
   发表时间:2010-07-27  
完全是在扯淡,重复的只是申明的引用,而且只是占用栈,根本不会占用堆空间。更何况jvm是做过优化的,完全可以清楚
0 请登录后投票
   发表时间:2010-07-27  
for loop外不需要用到的当然在loop里定义。
这样代码示例到处都是。
骂你的人out了。

如果他是你的直接上级,你要想一想如何不伤他面子让他知道他错了。
不然你被打上"不会编程的标签",很难混的。
12 请登录后投票
   发表时间:2010-07-27  
遇到过跟你类似的情形,在搞一个flex项目时,有同事跟我说as3里不能在循环体内定义对象,否则会额外创建出大量对象影响性能。我对此深表怀疑,但他资历比较老所以整个项目组的人都按他说的写。。
0 请登录后投票
   发表时间:2010-07-27  
我觉得第一种写法更清晰一点,而且又不是new对象,为什么会占用大量堆内存?
0 请登录后投票
   发表时间:2010-07-28  
J-catTeam 写道
vvggsky 写道
评审的说的没错,重复多建了许多对象

不过也没太大区别


没有重复创建,只是重复申明,不存在多余内存消耗的问题。



哈哈!
说真的,楼主的写法更科学!
他有效地控制了变量的作用域,防止命名冲突和变量错误引用.
0 请登录后投票
   发表时间: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对象是否回收对系统有相当大的影响.
所以评审这种代码是很无聊的.
评审的时候找出一代码潜在问题, 重新组织代码的结构远比要纠结这种问题有意义的多
1 请登录后投票
   发表时间:2010-07-28  
中国就是这类所谓的牛人太多了,最近我还听到有“牛”人开始宣扬设计模式无用论。

不知道是咱们国家的牛人生于计算机发明之前,还是由于太自我感觉良好了!

这种人的心态就如同唐某某的那种信口开河,认为敢于说就可以标新立异。
0 请登录后投票
   发表时间:2010-07-28  
团队保持一种习惯是需要的

除非当这种习惯称为瓶颈的时候

好的团队写出的代码基本是一样的
0 请登录后投票
   发表时间:2010-07-28  
  for(int i = 0;i<arr.len;i++) {
  A a = arr[i];
  System.out.println(s);
  }
这样写,是不会在堆内存里分配对象了。A a,只是局部变量,在栈内存里分配,是一个对象的引用而已,在循环体内,就多了arr.len个变量,消耗的是栈内存。
0 请登录后投票
论坛首页 Java企业应用版

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