下面这两种for循环中新建对象写法有什么区别呢?
第一种:
list<User> users = new ArrayList<User>();
User user = null;
for (int i = 0; i < 10; i++) {
user = new User();
user.setUserId(i);
user.setUserName("segment" + i);
users.add(user);
}
……
第二种:
list<User> users = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setUserId(i);
user.setUserName("segment" + i);
users.add(user);
}
……
这两种写法对集合users中的内容有影响吗,还是只是性能上有区别?
迷茫2017-04-17 17:44:37
基本没有区别。唯一的差别在于引用计数器的调整时机有点不同而已,但对象始终有被引用,连GC也不会被触发。所以这个真的没什么区别。
在循环体内声明的对象,作用域结束后标记对象会释放引用。而循环体外声明的,会在下次赋值时,才会释放前一个引用。即便没有被容器保存起来,在JAVA的GC机制下,也是没有多大区别的,都在下一次GC之行时才释放对象。
对于代码可读性上考虑,对象尽在循环体内使用就不要在外边声明,作用域大了代码复杂度高的时候就很容易出错。
还是那个原则:需要的时候才创建。