Kekeliruan Penduaan Kolam Rentetan Java
Pertimbangkan coretan kod berikut:
String first = "abc"; String second = new String("abc");
Menggunakan kata kunci baharu mencipta objek String baharu. Walau bagaimanapun, persoalan timbul: adakah objek baharu ini berada dalam timbunan biasa atau kolam String? Dan berapa banyak objek String berakhir dalam kolam?
Mekanisme Kolam Rentetan
Kolam Rentetan berfungsi sebagai cache, mengoptimumkan penggunaan memori. Apabila anda mengisytiharkan String literal seperti "abc," pengkompil mengenalinya dan mengambil objek String sedia ada daripada kolam jika ada. Kedua-dua s dan p dalam contoh berikut akan merujuk objek String yang sama:
String s = "abc"; String p = "abc";
Kesan String() baharu
Walau bagaimanapun, mencipta objek String baharu menggunakan new String("abc") mencipta objek berasingan yang tidak disimpan dalam kolam. Kolam itu menyimpan rujukan kepada "abc" literal tetapi bukan salinan yang dijana dengan baharu.
Memandangkan String tidak boleh diubah dalam Java, tidak ada gunanya menggunakan String("harfiah") baharu kerana ia memerlukan overhed yang tidak perlu.
Rentetan Interling
Memanggil kaedah intern() pada objek String menambahkannya ke kolam jika ia belum ada. Kaedah ini mengembalikan rujukan kepada Rentetan terkumpul, sama ada sudah berada dalam kumpulan atau tidak.
Kesimpulan
Pada dasarnya, menggunakan kata kunci baharu mencipta Rentetan berasingan objek di luar kolam, walaupun rentetan literal yang sama sudah wujud dalam kolam. Kolam String hanya menyimpan rujukan kepada rentetan literal, mengoptimumkan peruntukan memori. Adalah penting untuk mengetahui tingkah laku ini untuk mengelakkan penciptaan objek yang tidak perlu dan menggalakkan pengurusan ingatan yang cekap.
Atas ialah kandungan terperinci Adakah `new String('abc')` Mencipta Objek String Baharu dalam Kolam Rentetan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!