for循环中创建对象

下面这两种for循环中新建对象写法有什么区别呢?
第一种:

list<User> users = new ArrayList<User>;
User user = null;
for int i = 0; i < 10; i++ { user = new User; user.setUserIdi; user.setUserName"segment" + i; users.adduser;
}
……

第二种:

list<User> users = new ArrayList<User>;
for int i = 0; i < 10; i++ { User user = new User; user.setUserIdi; user.setUserName"segment" + i; users.adduser;
}
……

这两种写法对集合users中的内容有影响吗,还是只是性能上有区别?

没有影响,只是user变量的作用域不同。
如果需要对循环的最后一个值做特殊处理,用第一种形式;其它我认为用第二种比较好。

每次循环都新建一个对象,每个对象都是不同的。两种写法没什么区别

都可以。没什么区别

list<User> users = new ArrayList<User>;
for int i = 0; i < 10; i++ { users.addnew User.setUserIdi.setUserName"segment" + i;
}

个人认为似乎没什么区别..

可能第一个性能好一点,但这完全不是java程序员考虑的问题,直观上说,第二个有更好的编码规范和易读性。

似乎第一种多创建了一个对象,其余没什么影响

记住一个原则吧:变量在需要的时候才声明,才创建。所以:第二种,但区别很小。那些说效率差异的同学,希望有数据支撑,拿出来给大伙看看

内容没啥影响吧 就是第一种在for循环结束后user依然指向了一段内存不会被垃圾回收器回收

基本没有区别。唯一的差别在于引用计数器的调整时机有点不同而已,但对象始终有被引用,连GC也不会被触发。所以这个真的没什么区别。
在循环体内声明的对象,作用域结束后标记对象会释放引用。而循环体外声明的,会在下次赋值时,才会释放前一个引用。即便没有被容器保存起来,在JAVA的GC机制下,也是没有多大区别的,都在下一次GC之行时才释放对象。

对于代码可读性上考虑,对象尽在循环体内使用就不要在外边声明,作用域大了代码复杂度高的时候就很容易出错。
还是那个原则:需要的时候才创建。

这两个是有区别的,执行结果不同
参考下面文章:
http://ocaicai.iteye.com/blog…

发表评论

电子邮件地址不会被公开。 必填项已用*标注