下面这两种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中的内容有影响吗,还是只是性能上有区别?
沒有影響,只是user變數的作用域不同。
如果需要對循環的最後一個值做特殊處理,用第一種形式;其它我認為用第二種比較好。
每次循環都新建一個對象,每個對像都是不同的。兩種寫法沒什麼差別
都可以。沒什麼差別
雷雷
個人認為似乎沒什麼差別..
可能第一個表現好一點,但這完全不是java程式設計師考慮的問題,直覺上說,第二個有更好的編碼規格和易讀性。
似乎第一種多創建了一個對象,其餘沒什麼影響
記住一個原則吧:變數在需要的時候才聲明,才創建。所以:第二種,但差別很小。那些說效率差異的同學,希望有數據支撐,拿出來給大夥看
內容沒啥影響吧 就是第一種在for循環結束後user依然指向了一段內存不會被垃圾回收器回收
基本上沒有差別。唯一的差異在於引用計數器的調整時機有點不同而已,但物件總是被引用,連GC也不會被觸發。所以這個真的沒什麼差別。
在循環體內聲明的對象,作用域結束後標記對象會釋放引用。而循環體外聲明的,會在下次賦值時,才會釋放前一個引用。即便沒有被容器保存起來,在JAVA的GC機制下,也是沒有太大差別的,都在下一次GC之行時才釋放物件。
對於程式碼可讀性上考慮,物件盡在循環體內使用就不要在外邊聲明,作用域大了程式碼複雜度高的時候就很容易出錯。
還是那個原則:需要的時候才創建。