Java基础:for循环内外创建对象的区别,哪个性能更优?

Posted ABin-阿斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础:for循环内外创建对象的区别,哪个性能更优?相关的知识,希望对你有一定的参考价值。

我是 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】变量声明在循环体内还是循环体外的争论,以及怎样才真正叫『避免在循环体中创建对象』?

java中的for循环里面创建对象和for循环外面创建对象之间的区别

for循环中创建对象

以上是关于Java基础:for循环内外创建对象的区别,哪个性能更优?的主要内容,如果未能解决你的问题,请参考以下文章

高薪程序员&面试题精讲系列18之for和foreach的区别原理,哪个效率更高?

2.java基础回顾集合1

java中新建对象设为null 和new 一个对象的区别

java内外循环打印阶梯*号

Java基础---Java循环区别

java基础三种循环的使用及区别