8 回答

TA贡献2037条经验 获得超6个赞
第一种能够保证对象的整个生命周期在for循环内,规避了很多问题,比如for循环结束了,object就是可回收的了。也不会出现乱引用造成泄露的问题。
至于创建对象的个数,两种都一样多,都是在堆里面创建,只有当基本类型时,因为是在栈里面操作,存在常量池的概念,可以通过引用来使用对象

TA贡献1853条经验 获得超18个赞
第一种更清晰,不容易出问题,实际效果上差别不大,可以忽略。
如果有下面这种情况,第二种写法就会有问题
Object obj = null;
Collection c ;
for (condition){
obj = new Object();
//handle obj
if(condition2){
c.add(obj);
}
}

TA贡献1858条经验 获得超8个赞
个人觉得第一种方式靠谱,第二种方式存在一定的问题:
因为竟然你需要在循环中创建一个对象,肯定是需要这个对象接收值,如果用第二种方式,那么在循环中,如果你将你new的对象放入一个list中,你就会发现,无论你循环多少次,这个list中长度永远只有一个,因为在循环中,你为这个对象赋值,只是值改变了,但是引用是不变的,那放入list中,那永远长度只会是1.

TA贡献1780条经验 获得超4个赞
编译器会优化的,但是只从写法内容上来看,第二种写法对内存的占用会小一些.
这个要看你预估循环的次数,如果次数很少的话,没有什么区别.
如果循环次数比较多,第一种写法的obj变量就会在栈内存,同时指向在堆内存中new出的对象.
而第二种写法,obj变量只在栈内存中有一份,然后一直改变指向的堆内存对象.
添加回答
举报