论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 66463 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-28  
想说的是你没有错,评审官其实也没有错,写法虽然不会带来额外的内存消耗但是要从一个好的coding习惯来说,评审官是对的。
0 请登录后投票
   发表时间:2010-07-28  
代码要本身表达的是对同一个变量重复赋值,但做成重复定义总是不好的。看来JAVA胸怀还是挺大的,不像别的好些强类型语言根本就不会通过。
0 请登录后投票
   发表时间:2010-07-28  
骂你,你还觉得冤枉?如果循环很多,像这样的语句 i<arr.len 替不是很耗资源?
是不是应该放在循环之外。写代码之前难道公司不给你们培训编码规范吗?
0 请登录后投票
   发表时间:2010-07-28  
又一个长贴。

首先,且不论performance如何——你那个评审P都不懂——你的代码减小变量作用域,也就是减少了出bug的风险。这个最重要。

在这个运行效率换取开发效率的年代,那些芝麻绿豆大小的优化,起得了什么作用?不如在设计、构架的时候,多花点脑细胞,纠缠于这种战术问题的战役指挥官,通常都只能打败仗
1 请登录后投票
   发表时间:2010-07-28  
leonwoo 写道
骂你,你还觉得冤枉?如果循环很多,像这样的语句 i<arr.len 替不是很耗资源?
是不是应该放在循环之外。写代码之前难道公司不给你们培训编码规范吗?

请详细解释一下为什么很耗资源,
0 请登录后投票
   发表时间:2010-07-28  
leonwoo 写道
骂你,你还觉得冤枉?如果循环很多,像这样的语句 i<arr.len 替不是很耗资源?
是不是应该放在循环之外。写代码之前难道公司不给你们培训编码规范吗?

仔细看楼主写的:
XTU_xiaoxin 写道

骂我内容:说我会不会编程,把变量写在for循环里面,说如果遍历多次的话会占用大量的堆内存。
  要我改成如下形式:
    
  
   A a = null;
  for(int i = 0;i<arr.len;i++) {
		  a = arr[i];
		  System.out.println(s);
	  }
 

0 请登录后投票
   发表时间:2010-07-28  
JackAndroid 写道
完全是在扯淡,重复的只是申明的引用,而且只是占用栈,根本不会占用堆空间。更何况jvm是做过优化的,完全可以清楚


这个说法是对的
0 请登录后投票
   发表时间:2010-07-28  
LZ你代码肯定更好,你们的评审以前是估计是做c的,满脑子的堆栈,java是面向对象的,理论上根本没有堆栈(要谈jvm底层的除外)
LZ的A a = arr[i]; 写在for循环里,更符合面向对象的思维,况且a只在for循环内使用,更加不用定义到外面
总结就是,过程vs对象,过程以经验的优势在那一刻击败的对象
0 请登录后投票
   发表时间:2010-07-28  
看看我帖子里写的例子:
单纯从时间维度上计算,可以看出区别:
http://www.iteye.com/topic/723369
0 请登录后投票
   发表时间:2010-07-28  
XTU_xiaoxin 写道
今天代码评审时,评审官看见如下代码,把我是一顿好骂(代码是我写的),大致形式如下:

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

  骂我内容:说我会不会编程,把变量写在for循环里面,说如果遍历多次的话会占用大量的堆内存。
  要我改成如下形式:

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

其实我也不知道他说的对不对,但他让我改的那种方式是绝对没问题的。但我觉得如果变量写在for循环里面,如果没被用到,应该会被垃圾回收的,不会占用太多堆内存吧。

其实,我看了一些大牛写的代码,他们都把变量写在for里面,只是说不要在for里new对象就行了,我很纳闷。。。。。


从这个代码片段上看不出什么问题,因为对象a并未被使用,而楼主又要创建出arr.len个数量的a对象,不知道用意是什么,其实从这段代码看的话,arr.len在10万以内是不会有什么问题的,关键他创建这些对象的作用是什么
0 请登录后投票
论坛首页 Java企业应用版

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