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

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

迷茫
迷茫

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

membalas semua(11)
迷茫

Tiada kesan, cuma skop pembolehubah pengguna berbeza.
Jika anda perlu melakukan pemprosesan khas pada nilai terakhir gelung, gunakan bentuk pertama jika tidak, saya rasa bentuk kedua adalah lebih baik.

巴扎黑

Objek baharu dicipta setiap kali ia gelung dan setiap objek adalah berbeza. Tiada perbezaan antara dua cara penulisan

大家讲道理

Semuanya OK. Tiada beza

Peter_Zhu
list<User> users = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
    users.add(new User().setUserId(i).setUserName("segment" + i));
}
左手右手慢动作

Secara peribadi, nampaknya tiada bezanya..

黄舟

Mungkin yang pertama mempunyai prestasi yang lebih baik, tetapi ini bukan masalah yang dianggap oleh pengaturcara Java secara intuitif, yang kedua mempunyai standard pengekodan dan kebolehbacaan yang lebih baik.

迷茫

Nampaknya kaedah pertama mencipta satu lagi objek, dan selebihnya tidak mempunyai kesan

洪涛

Ingat satu prinsip: pembolehubah harus diisytiharkan dan dicipta hanya apabila diperlukan. Jadi: yang kedua, tetapi perbezaannya kecil. Pelajar yang mengatakan terdapat perbezaan dalam kecekapan berharap mempunyai data untuk menyokongnya dan menunjukkannya kepada semua orang

洪涛

Kandungan tidak mempunyai apa-apa impak Ia adalah jenis pertama Selepas gelung untuk tamat, pengguna masih menunjuk ke sekeping memori yang tidak akan dikitar semula oleh pengumpul sampah

迷茫

Pada asasnya tiada beza. Satu-satunya perbezaan ialah masa pelarasan kaunter rujukan sedikit berbeza, tetapi objek sentiasa dirujuk, malah GC tidak akan dicetuskan. Jadi yang ini benar-benar tiada bezanya.
Untuk objek yang diisytiharkan dalam badan gelung, menandakan objek akan mengeluarkan rujukan selepas skop tamat. Walau bagaimanapun, jika ia diisytiharkan di luar gelung, rujukan sebelumnya tidak akan dikeluarkan sehingga tugasan seterusnya. Walaupun ia tidak disimpan oleh bekas, di bawah mekanisme GC JAVA, tidak banyak perbezaan Objek itu tidak akan dilepaskan sehingga perjalanan GC seterusnya.

Memandangkan kebolehbacaan kod, objek hanya boleh digunakan dalam badan gelung dan tidak boleh diisytiharkan di luar Apabila skopnya besar dan kerumitan kod tinggi, mudah untuk membuat ralat.
Masih prinsip yang sama: buat apabila diperlukan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan