java - for循环中创建对象
迷茫
迷茫 2017-04-17 17:42:37
0
11
1605

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(11)
迷茫

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
大家讲道理

何でもいいです。違いはありません

いいねを押す +0
Peter_Zhu

リーリー

いいねを押す +0
左手右手慢动作

個人的には、違いはないようです..

いいねを押す +0
黄舟

おそらく最初の方がパフォーマンスは優れていますが、これは Java プログラマーがまったく考慮する問題ではありません。直感的に言えば、2 番目の方がコーディング標準と可読性が優れています。

いいねを押す +0
迷茫

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

いいねを押す +0
洪涛

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

いいねを押す +0
洪涛

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

いいねを押す +0
迷茫

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート