Rumah >Java >javaTutorial >Adakah `new String('abc')` Mencipta Objek String Baharu dalam Kolam Rentetan Java?

Adakah `new String('abc')` Mencipta Objek String Baharu dalam Kolam Rentetan Java?

DDD
DDDasal
2024-12-25 21:48:16729semak imbas

Does `new String(

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn