suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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

迷茫迷茫2802 Tage vor1593

Antworte allen(11)Ich werde antworten

  • 迷茫

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

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

    Antwort
    0
  • 巴扎黑

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

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

    Antwort
    0
  • 大家讲道理

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

    都可以。没什么区别

    Antwort
    0
  • 天蓬老师

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

    list<User> users = new ArrayList<User>();
    for (int i = 0; i < 10; i++) {
        users.add(new User().setUserId(i).setUserName("segment" + i));
    }

    Antwort
    0
  • ringa_lee

    ringa_lee2017-04-17 17:44:37

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

    Antwort
    0
  • 黄舟

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

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

    Antwort
    0
  • 迷茫

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

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

    Antwort
    0
  • PHP中文网

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

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

    Antwort
    0
  • PHP中文网

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

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

    Antwort
    0
  • 迷茫

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

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

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

    Antwort
    0
  • StornierenAntwort