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變量只在棧內存中有一份,然后一直改變指向的堆內存對象.
添加回答
舉報