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