日期:2014-05-18  浏览次数:20628 次

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

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

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

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

------解决方案--------------------
第二种。。。
------解决方案--------------------
你们说栈区分别会产生几个对象存储User地址?
------解决方案--------------------
第二种比较好。

不过只是循环5次这么少 应该也没啥区别
------解决方案--------------------
我想说这两种写法,效果是一样嘛?

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

而第二种写法 只有一个
------解决方案--------------------
楼上说的都对,其实无所谓了。
------解决方案--------------------
第二个好,因为第一个在for循环里面声明了多次对象,浪费了空间!
------解决方案--------------------
第二种,出于对空间的节省
------解决方案--------------------
当然是第二种。。。
------解决方案--------------------
个人倾向于第一种:1、只有在需要时才定义变量,简洁;2、变量的作用域控制,易维护。在这里时间和空间可以不考虑,不是核心算法。如果非要计较,还不如;list.add(new User());。况且对象也不会多。