Dalam Java, "String literals" seperti "abc" diasingkan, bermaksud berbilang rujukan kepada titik nilai literal yang sama kepada yang sama contoh dalam ingatan. Ini membantu mengoptimumkan penggunaan dan prestasi memori. Walau bagaimanapun, menggunakan new dengan literal String, seperti String("abc") baharu, mencipta objek String baharu, walaupun literal sudah wujud dalam kolam String.
Dua pernyataan mengenai kumpulan String telah dibangkitkan sedikit kekeliruan:
Untuk menjelaskan, Pernyataan 2 membayangkan bahawa literal String masih dimasukkan ke dalam kumpulan String walaupun semasa mencipta objek dengan baharu, tetapi objek baharu dibina tanpa mengira.
Dalam contoh:
String one = new String("test"); String two = "test";
Rujukan yang diserahkan kepada String("ujian") baharu adalah sama seperti dua kerana latihan. Walau bagaimanapun, objek String baharu dengan nilai "ujian" dicipta dan diberikan kepada satu.
Oleh itu, terdapat dua objek String berasingan dengan nilai "ujian": satu dalam kumpulan malar (dirujuk oleh dua) dan yang baru dicipta dengan yang baru (dirujuk oleh satu). Itulah sebabnya one.equals(two) adalah benar (mereka mempunyai nilai yang sama), tetapi satu == dua adalah palsu (mereka merujuk kepada objek yang berbeza).
Pernyataan 1 harus diungkap semula sebagai "Apabila pengkompil menemui literal String, ia menyemak untuk melihat sama ada String yang sama sudah wujud _dalam kolam_." Rentetan hanya dimasukkan jika ia dimasukkan secara eksplisit atau digunakan sebagai literal dalam definisi kelas.
Atas ialah kandungan terperinci Bagaimanakah Kolam Rentetan Java Mengendalikan `String baharu(\"literal\")`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!