搜尋

首頁  >  問答  >  主體

java - for循环中创建对象

下面这两种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中的内容有影响吗,还是只是性能上有区别?

迷茫迷茫2805 天前1611

全部回覆(11)我來回復

  • 迷茫

    迷茫2017-04-17 17:44:37

    沒有影響,只是user變數的作用域不同。
    如果需要對循環的最後一個值做特殊處理,用第一種形式;其它我認為用第二種比較好。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:44:37

    每次循環都新建一個對象,每個對像都是不同的。兩種寫法沒什麼差別

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:44:37

    都可以。沒什麼差別

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:44:37

    雷雷

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 17:44:37

    個人認為似乎沒什麼差別..

    回覆
    0
  • 黄舟

    黄舟2017-04-17 17:44:37

    可能第一個表現好一點,但這完全不是java程式設計師考慮的問題,直覺上說,第二個有更好的編碼規格和易讀性。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 17:44:37

    似乎第一種多創建了一個對象,其餘沒什麼影響

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:44:37

    記住一個原則吧:變數在需要的時候才聲明,才創建。所以:第二種,但差別很小。那些說效率差異的同學,希望有數據支撐,拿出來給大夥看

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 17:44:37

    內容沒啥影響吧 就是第一種在for循環結束後user依然指向了一段內存不會被垃圾回收器回收

    回覆
    0
  • 迷茫

    迷茫2017-04-17 17:44:37

    基本上沒有差別。唯一的差異在於引用計數器的調整時機有點不同而已,但物件總是被引用,連GC也不會被觸發。所以這個真的沒什麼差別。
    在循環體內聲明的對象,作用域結束後標記對象會釋放引用。而循環體外聲明的,會在下次賦值時,才會釋放前一個引用。即便沒有被容器保存起來,在JAVA的GC機制下,也是沒有太大差別的,都在下一次GC之行時才釋放物件。

    對於程式碼可讀性上考慮,物件盡在循環體內使用就不要在外邊聲明,作用域大了程式碼複雜度高的時候就很容易出錯。
    還是那個原則:需要的時候才創建。

    回覆
    0
  • 取消回覆