Rumah >Java >javaTutorial >String Constant Pool: Mengapa \'baru\' Mencipta Objek Rentetan Baharu Walaupun Wujud Tersurat?
String Constant Pool: Peperiksaan Mendalam
String literals dalam Java dikumpulkan untuk mengoptimumkan penggunaan memori dan meningkatkan prestasi. Ini bermakna apabila literal String ditemui, pengkompil menyemak String Constant Pool untuk objek String sedia ada dengan nilai yang sama. Jika ditemui, rujukan dihalakan kepada objek sedia ada, mengelakkan penciptaan objek baharu.
Walau bagaimanapun, kekeliruan timbul apabila menggunakan pengendali "baru" untuk mencipta objek String baharu, kerana ini nampaknya bercanggah dengan peraturan dari interning. Untuk menjelaskan perkara ini, mari kita periksa pernyataan berikut:
Pernyataan ini menunjukkan bahawa sementara literal String dimasukkan dan disimpan dalam kumpulan, penggunaan "baharu" memaksa JVM untuk mencipta objek String baharu. Ini bermakna walaupun terdapat String yang setara dalam kolam, pengendali "baharu" memintasnya dan memperuntukkan objek baharu dalam memori bukan kolam.
Untuk menggambarkan ini, pertimbangkan contoh berikut:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
Seperti yang dijangkakan, nilai kedua-dua "satu" dan "dua" ialah "ujian", tetapi perbandingan "==" mengembalikan palsu kerana ia merujuk kepada objek String yang berbeza. Ini kerana penggunaan "baharu" memaksa penciptaan objek String baharu untuk "satu", walaupun "ujian" literal String sudah wujud dalam kolam.
Ringkasnya, String Constant Pool mengoptimumkan penggunaan memori oleh interning String literal. Walau bagaimanapun, penggunaan "baharu" memintas kolam dan mencipta objek String baharu dalam memori bukan kolam. Ini menghasilkan dua objek String yang berbeza dengan nilai yang sama tetapi rujukan yang berbeza.
Atas ialah kandungan terperinci String Constant Pool: Mengapa \'baru\' Mencipta Objek Rentetan Baharu Walaupun Wujud Tersurat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!