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循环中创建对象

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值