Rumah  >  Artikel  >  Java  >  Bagaimanakah Kolam Rentetan Java Mengendalikan `String baharu(\"literal\")`?

Bagaimanakah Kolam Rentetan Java Mengendalikan `String baharu(\"literal\")`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 12:11:29841semak imbas

How Does the Java String Pool Handle `new String(

String Constant Pool: Menjelaskan Salah Tanggapan

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:

  • Pernyataan 1: "Apabila pengkompil menemui literal String, ia menyemak kolam untuk melihat sama ada String yang sama sudah wujud."
  • Pernyataan 2: "Apabila anda menggunakan baru dengan literal String, rujukan kepada literal masih dimasukkan ke dalam jadual malar (Kolam Literal String), tetapi JVM mencipta objek String baharu pada masa jalankan. "

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!

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