黑马程序员技术交流社区

标题: 为什么“尽量少的在循环中执行方法调用” [打印本页]

作者: yanglfree    时间: 2013-8-30 01:00
标题: 为什么“尽量少的在循环中执行方法调用”
本帖最后由 yanglfree 于 2013-8-30 12:11 编辑

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

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

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

可以修改为:



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

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



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

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


作者: ★忙碌★    时间: 2013-8-30 07:36
亲,上面一种是每次执行for循环都会调用list.size(),时刻判断list的长度,上面的写法代码上比较简洁,但是每次执行都会调用list.size(),增加系统开销,下面一种写法只调用一次list.size(),相对而言,如果list的长度是不变的话,用下面一种方法更好,但上面一种写法比较通用!
作者: 刘劲松    时间: 2013-8-30 11:39
讲下面那种:循环赋初值只进行一次,而下次循环回来只进行判断,判断条件也就是i<size;判断完循环体---打印一次,然后回来i++。你要搞清楚循环各部分执行的顺序就知道了。对于如果list.size()方法调用的值变了的话,要执行完整个循环,也就是你赋的当次size。

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2