热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请教:下面的代码两种写法,有什么区别?哪个好?

下面的代码两种写法,有什么区别?哪个好?(1)List<User>listnewArrayList<User>();for(inti0;i
下面的代码两种写法,有什么区别?哪个好?
(1)
List list = new ArrayList();

for (int i = 0; i < 5; i++) {
User user = new User();
list.add(user);
}
System.out.println(list);
(2)
List list = new ArrayList();

User user;
for (int i = 0; i < 5; i++) {
user = new User();
list.add(user);
}
System.out.println(list);

21 个解决方案

#1


作用域不同,后者延长了最后一次引用的生命周期,这样后者出for循环后你还可以引用到这个user,带来的副作用是你的代码依赖于for语句代码块。如果你后面都不会用到这个user,那jvm对其垃圾回收的时间会延长,性能反而下降。
当然正常情况来说,java声明变量会在堆栈中申请空间的。也就是说前者比后者更浪费空间。虽然都是生成了10个对象,但是额外的开销就是变量的空间。还是推荐第二种。

#2


第二种。。。

#3


你们说栈区分别会产生几个对象存储User地址?

#4


第二种比较好。

不过只是循环5次这么少 应该也没啥区别

#5


我想说这两种写法,效果是一样嘛?

第一种写法 list里面会五个对象

而第二种写法 只有一个

#6


楼上说的都对,其实无所谓了。

#7


第二个好,因为第一个在for循环里面声明了多次对象,浪费了空间!

#8


第二种,出于对空间的节省

#9


当然是第二种。。。

#10


其实,在Thinking ing java中有这么一句话:堆栈区指针向下移动分配空间,向上移释放空间,这种设计为变量申请空间非常方便,所以在当今这个大内存的环境下 实际上第一种性能速度并不比第二种优秀,除非你让把变量存储在 寄存器中。

#11


没什么区别,第一种可以让变量的作用域变小,看代码的时候总体上来说会更好理解一点,尤其是在一个很长的循环里。
Java 里一般都是推荐变量需要用的时候才定义,不是在函数开始的时候定义好。

#12


第二种好 ,

#13


引用 5 楼 a465606179 的回复:
我想说这两种写法,效果是一样嘛?

第一种写法 list里面会五个对象

而第二种写法 只有一个

你确定?每一次循环都new了一遍,你可以自己去试试

#14


引用 3 楼 AA5279AA 的回复:
你们说栈区分别会产生几个对象存储User地址?

第一种5个,第二种1个

#15


引用 14 楼 yy52113142011 的回复:
Quote: 引用 3 楼 AA5279AA 的回复:

你们说栈区分别会产生几个对象存储User地址?

第一种5个,第二种1个
错了,两种都是5个

#16


我觉得这两种根本没什么区别,说第二种好的就说节省空间,我就想问问到底哪节省空间了,栈中申请空间也是一样的

#17


性能后面好一点,但可读性,可维护性前面好,这么点性能可以放弃

#18


(1)输出的是:[object.User@c17164, object.User@1fb8ee3, object.User@61de33, object.User@14318bb, object.User@ca0b6]

(2)输出的是:[object.User@c17164, object.User@1fb8ee3, object.User@61de33, object.User@14318bb, object.User@ca0b6]

都是new了一个对象,,所以new那里是没问题的,,问题在于 User user;这样定义会不会占用内存空间

对象占用的是堆内存。。

在Java中,程序员需要通过关键字new为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。。所以应该是new了才会申请到内存空间,而定义User user;应该没有申请吧,所以谈不到释放的问题,也就谈不上占用吧

#19


区别没那么明显,你只是声明并没有创建,而且第一种还比较容易维护。

#20


第一种和第二种有区别吗,第一种 在循环体内声明变量,第二次循环难道不会使用第一次循环已经声明过的变量吗?如果不使用,栈中可能同时存在两个user变量吗?

#21


个人倾向于第一种:1、只有在需要时才定义变量,简洁;2、变量的作用域控制,易维护。在这里时间和空间可以不考虑,不是核心算法。如果非要计较,还不如;list.add(new User());。况且对象也不会多。

推荐阅读
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
author-avatar
辽宁琢一传媒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有