Pengenalan:
String Constant Pool ialah ciri bagi Mesin Maya Java (JVM) yang menyimpan nilai malar, termasuk literal String. Apabila JVM menemui literal String semasa penyusunan, ia menyemak kumpulan untuk yang sedia ada dengan nilai yang sama. Jika ditemui, rujukan kepada literal baharu dihalakan kepada Rentetan sedia ada, mengelakkan penciptaan tika baharu.
Berlatih dengan Kata Kunci "baharu":
Walau bagaimanapun , penggunaan kata kunci "baharu" semasa mencipta objek String baharu memperkenalkan gelagat berbeza, seperti yang digariskan dalam rujukan yang disediakan. Walaupun rujukan kepada literal String ("ujian" dalam kes ini) masih akan diletakkan dalam kumpulan, JVM bertanggungjawab untuk mencipta objek String baharu pada masa jalan dan bukannya menggunakan semula objek daripada kolam.
Soalan:
Jika rujukan kepada literal String dalam kolam adalah sama seperti apabila dibuat dengan "baharu", bukankah JVM sepatutnya mengembalikan rujukan sedia ada dan bukannya mencipta yang baharu ?
Jawapan:
Tidak, JVM tidak akan mengembalikan rujukan sedia ada apabila pengendali "baru" digunakan. Sebaliknya, ia akan mencipta objek String baharu dan menetapkannya kepada rujukan yang dibuat oleh kata kunci "baharu". Ini kerana:
Contoh:
<code class="java">String literal = "test"; String one = new String(literal); String two = "test"; System.out.println(literal == two); // true (references in pool) System.out.println(one == two); // false (distinct objects)</code>
Dalam contoh ini, rujukan "harfiah" dan "dua" menghala ke objek String yang sama dalam kolam. Walau bagaimanapun, rujukan "satu" menunjuk kepada objek String berbeza yang dicipta oleh "baru." Oleh itu, perbandingan kesamaan menggunakan "==" mengembalikan palsu.
Penjelasan:
Pernyataan "Apabila pengkompil menemui literal String, ia menyemak kumpulan untuk melihat jika String yang sama sudah wujud" harus ditafsirkan sebagai "dalam kumpulan", bermakna hanya literal String yang telah dimasukkan atau ditambahkan secara eksplisit pada kumpulan akan dipertimbangkan untuk latihan.
Atas ialah kandungan terperinci Mengapa Java Mencipta Objek Rentetan Baharu Walaupun Rujukan kepada Huruf yang Sama Wujud dalam Kolam Malar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!