我是 ABin-阿斌:写一生代码,创一世佳话,筑一览芳华。 如果小伙伴们觉得文章有点 feel ,那就点个赞再走哦。
声明:
- 原作者:博客园:挑战者V
- 原文链接:https://www.cnblogs.com/youcong/p/14619034.html
一、前言
- 最近在项目中看到同事写的代码for循环中,创建对象时喜欢声明成员变量,于是我就查了一下这样写的好处是什么?
二、代码参考示例
- for循环内创建对象,就像这样的代码:
List<DriverTrack> driverTracks = driverService.selectDriverTrackByExample(example);
List<TrackVo> list = new ArrayList<TrackVo>();
if (driverTracks != null && driverTracks.size() > 0) {
for (DriverTrack driverTrack : driverTracks) {
TrackVo trackVo = new TrackVo();
trackVo.setLat(driverTrack.getLatitude());
trackVo.setLng(driverTrack.getLongitude());
list.add(trackVo);
}
}
- for循环外创建对象,就像这样的代码:
List<DriverTrack> driverTracks = driverService.selectDriverTrackByExample(example);
List<TrackVo> list = new ArrayList<TrackVo>();
if (driverTracks != null && driverTracks.size() > 0) {
TrackVo trackVo = null;
for (DriverTrack driverTrack : driverTracks) {
trackVo = new TrackVo();
trackVo.setLat(driverTrack.getLatitude());
trackVo.setLng(driverTrack.getLongitude());
list.add(trackVo);
}
}
三、争议点
两者写法的对比存在争议,有如下观点:
- A认为后者比前者要好(因为这样写只创建了一个对象的引用,也就是在for循环里面去new对象的时候,都只是将这个引用指向不同的对象);
- B认为随着JDK不断升级迭代,两者效率是一样;
- C认为JVM早就解决这样的问题,无需担心。
我的看法:
- 我更偏向于for循环体内定义对象,因为我一直的写法也是如此,特别是JDK从过去的1.5到现在,JDK已经有15了,像这样的问题JDK开发者早已经替我们考虑好了(Java不像C++,对内存的把控非常严,因为已经有JVM替我们管理了,我们只需专注于业务)。
- 但是从另外一个角度来看,弄清楚为什么比仅仅停留在使用层面,能让我们对于这项技术有更深入的了解和掌握,深入的了解和掌握能让我们走得更远。最近公司领导就特别建议在循环体外定义对象而非在循环体内定义对象。
四、总结
- 下面这些文章对这两种写法做了深入的测试说明,记得一定要看哦
参考资料如下:
【JAVA】变量声明在循环体内还是循环体外的争论,以及怎样才真正叫『避免在循环体中创建对象』?