论坛首页 Java企业应用论坛

代码难道不是这么写的?

浏览 66529 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-07-28   最后修改:2010-07-28
来看s 的

把java的for ... in...的源码看一下就明白了
0 请登录后投票
   发表时间:2010-07-28  
评审官脑残,多大点事啊。而且他的观点未必正确。

for(a:arr){...}

len=arr.len
for(int i=0;i<len;i++){..

for(int i=arr.len-1;i>=0;i--)

都是优化,他怎么不说,非要提这个变量作用范围的问题。这个arr很大吗?不牵涉到性能优化,这个代码爱怎么写怎么写。而且不管咋样,他都不应该用“会不会编程”这样带有攻击性的语言。
0 请登录后投票
   发表时间:2010-07-28   最后修改:2010-07-28
临时变量超出作用域,其引用的内存就可以回收了,而且JVM对这种情况有优化
如果生命周期变长,反而有可能多次回收收不掉,进入老年代
按LZ评审官的写法,反而会多一条初始化A的指令
LZ的评审官多半是做C出来的吧
1 请登录后投票
   发表时间:2010-07-28  
说真的,我还真看不懂这代码,s是从哪里来,a又要到哪里去?
0 请登录后投票
   发表时间:2010-07-28   最后修改:2010-07-28
写在里面好,我在问答板块里面有人提过,写在外面,会出来内存溢出,而写在里面,则不会。
0 请登录后投票
   发表时间:2010-07-28  
dennis_zane 写道
什么a=null会更快,有什么依据,什么arr.length重复计算影响性能,都是扯淡,楼主的代码已经可以了。
在任何时候,你要想办法缩减变量的作用域,而不是扩大。


对于数组来说,length是放在数组在堆中的对象头里面的。而且数组初始化的时候length就是固定的了。对于arr.length都是取内存的同一个位置的值。
不过如果把arr.length赋值给函数类的变量,这样会放在执行栈的变量里面,速度是应该是会快一点点的。
不过没有尝试过。

这个是属于很小的细节的东西的,优化也不需要优化到这个地步。尽管说只有每个小点都做好优化才能是整个大系统能更好的性能,但是又不是google的主页,不需要优化到这样的程度。
0 请登录后投票
   发表时间:2010-07-28  
楼主好可爱,加油啊
0 请登录后投票
   发表时间:2010-07-28  

大伙都别纠结了 这样不就行了么 满足评审

 
			{
				A a = null
				int len = arr.len;
				for(int i = 0; i < len; i++) {  
					a = arr[i];  
					System.out.println(s);  
				}
			} 
0 请登录后投票
   发表时间:2010-07-28  
JVM 会帮你优化这些变量的定义。 但是最好还是写的规范点。
0 请登录后投票
   发表时间:2010-07-28  
现代的JVM会做好优化的了,两种做法相差不多,我更偏向楼主的做法,数据到用时再定义.
0 请登录后投票
论坛首页 Java企业应用版

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