A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 yanglfree 于 2013-8-30 12:11 编辑

刚在论坛上看到的这个帖子"Java编程中写出好代码的建议(非原创) "中的第三点如下:

3、尽量少的在循环中执行方法调用

尽量在循环中少做一些可避免的方法调用,这样可以节省方法栈的创建。例如:

  • for(int i=0;i<list.size();i++){  
  •   System.out.println(i);  
  • }

可以修改为:

  • for(int i=0,size=list.size();i<size;i++){  
  •   System.out.println(i);  
  • }


为什么说下面一种代码没有上面一种好?为什么i<list.size()没有size=list.size();i<size好,这两张方法区别很大吗?

因为毕老师的java视频里面关于数组那一块循环条件都是x < arr.length


评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

3 个回复

倒序浏览
亲,是下面一种比较好
因为上面的那一种长度值是通过方法调用获得的。
也就相当于每一次循环进行条件判断的时候,都调用方法获取值。
方法也就跟着进入了栈内存,因此循环一次,创建一次,是对内存的浪费
而下面的那一种是获取到值之后赋值给一个变量,大大减少了内存的使用。

亲,如果还是不明白,建议看看有关程序运行时堆栈的内存图解!

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
亲,上面一种是每次执行for循环都会调用list.size(),时刻判断list的长度,上面的写法代码上比较简洁,但是每次执行都会调用list.size(),增加系统开销,下面一种写法只调用一次list.size(),相对而言,如果list的长度是不变的话,用下面一种方法更好,但上面一种写法比较通用!

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
讲下面那种:循环赋初值只进行一次,而下次循环回来只进行判断,判断条件也就是i<size;判断完循环体---打印一次,然后回来i++。你要搞清楚循环各部分执行的顺序就知道了。对于如果list.size()方法调用的值变了的话,要执行完整个循环,也就是你赋的当次size。

现在回过头来看上面那个,list.size()作为判断条件的话,是动态的,每次都调用方法。所以说,个人觉得实现的结果都不一定相同,唯有list.size()一直是定值,结果才会一样。那样的话有前提才是下面那个好。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马