検索

ホームページ  >  に質問  >  本文

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日前1610

全員に返信(11)返信します

  • 迷茫

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

    ユーザー変数のスコープが異なるだけで、影響はありません。
    ループの最後の値に対して特別な処理を行う必要がある場合は、最初の形式を使用します。それ以外の場合は、2 番目の形式の方が良いと思います。

    返事
    0
  • 巴扎黑

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

    ループするたびに新しいオブジェクトが作成され、それぞれのオブジェクトは異なります。 2 つの書き方に違いはありません

    返事
    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 プログラマーがまったく考慮する問題ではありません。直感的に言えば、2 番目の方がコーディング標準と可読性が優れています。

    返事
    0
  • 迷茫

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

    最初のメソッドはもう 1 つのオブジェクトを作成し、残りは効果がないようです

    返事
    0
  • PHP中文网

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

    1 つの原則を覚えておいてください。変数は必要な場合にのみ宣言および作成する必要があります。つまり、2 番目ですが、違いは小さいです。効率に差があると主張する学生は、それを裏付けるデータを入手して、それをみんなに見せたいと考えています

    返事
    0
  • PHP中文网

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

    コンテンツには何の影響もありません。これは、for ループが終了した後も、ガベージ コレクターによってリサイクルされないメモリの一部を指します。

    返事
    0
  • 迷茫

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

    基本的には違いはありません。唯一の違いは、参照カウンタの調整タイミングが若干異なることですが、オブジェクトは常に参照され、GC もトリガーされません。したがって、これは実際には違いはありません。
    ループ本体で宣言されたオブジェクトの場合、オブジェクトをマークすると、スコープの終了後に参照が解放されます。ただし、ループの外で宣言された場合、前の参照は次の代入まで解放されません。コンテナによって保存されなかったとしても、JAVA の GC メカニズムでは、オブジェクトは次の GC トリップまで解放されません。

    コードの可読性を考慮すると、オブジェクトはループ本体内でのみ使用し、スコープ外で宣言しないでください。スコープが大きく、コードが複雑になると、エラーが発生しやすくなります。
    原則は同じです: 必要なときに作成します。

    返事
    0
  • キャンセル返事