cari

Rumah  >  Soal Jawab  >  teks badan

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

迷茫迷茫2881 hari yang lalu1625

membalas semua(11)saya akan balas

  • 迷茫

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

    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.

    balas
    0
  • 巴扎黑

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

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

    balas
    0
  • 大家讲道理

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

    Semuanya OK. Tiada beza

    balas
    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));
    }

    balas
    0
  • ringa_lee

    ringa_lee2017-04-17 17:44:37

    Secara peribadi, nampaknya tiada bezanya..

    balas
    0
  • 黄舟

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

    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.

    balas
    0
  • 迷茫

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

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

    balas
    0
  • PHP中文网

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

    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

    balas
    0
  • PHP中文网

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

    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

    balas
    0
  • 迷茫

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

    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.

    balas
    0
  • Batalbalas