Rumah >Java >javaTutorial >String Constant Pool: Mengapa \'baru\' Mencipta Objek Rentetan Baharu Walaupun Wujud Tersurat?

String Constant Pool: Mengapa \'baru\' Mencipta Objek Rentetan Baharu Walaupun Wujud Tersurat?

Susan Sarandon
Susan Sarandonasal
2024-11-03 08:05:30864semak imbas

String Constant Pool: Why Does

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:

  • "Apabila pengkompil menemui literal String, ia menyemak kolam untuk melihat sama ada String yang sama sudah wujud."
  • "Dalam kes 'baru,' rujukan kepada literal String masih dimasukkan ke dalam jadual malar, tetapi apabila anda menggunakan 'baharu,' JVM diwajibkan untuk mencipta objek String baharu pada masa larian, dan bukannya menggunakan objek daripada pemalar. table."

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!

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