Rumah > Java > javaTutorial > Adakah Mengisytiharkan Rentetan sebagai `akhir` dalam Java Mengubah Bagaimana `==` Membandingkannya?

Adakah Mengisytiharkan Rentetan sebagai `akhir` dalam Java Mengubah Bagaimana `==` Membandingkannya?

Susan Sarandon
Lepaskan: 2024-11-29 15:51:10
asal
177 orang telah melayarinya

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

Membandingkan Rentetan dengan == Apabila Diisytiharkan Akhir dalam Java

Di Java, operator == membandingkan rujukan memori dua objek. Walau bagaimanapun, apabila rentetan diisytiharkan sebagai muktamad dan dimulakan dengan pemalar masa kompilasi, gelagat unik timbul.

Senario 1: Rentetan Bukan Akhir

Pertimbangkan kod berikut segmen:

String str1 = "str";
String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
Salin selepas log masuk

Hasil kod ini adalah palsu. Operasi penggabungan mencipta objek Rentetan baharu, yang tidak sama dengan "rentetan" literal rentetan sedia ada.

Senario 2: Rentetan Akhir

Sekarang, mari kita mengisytiharkan rentetan sebagai muktamad:

final String str1 = "str";
final String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
Salin selepas log masuk

Anehnya, hasilnya kini benar. Ini kerana mengisytiharkan rentetan sebagai muktamad membolehkan pengkompil menyelaraskan nilainya dan menganggap keseluruhan ungkapan sebagai ungkapan pemalar masa kompilasi.

Pengoptimuman Pengkompil: Interning

Apabila ungkapan pemalar masa kompilasi melibatkan String, mesin maya Java (JVM) "melatih"nya, yang bermaksud ia menyimpan contoh unik bagi String di lokasi khas yang dipanggil kolam String. Oleh itu, rentetan bercantum dalam senario kedua dibandingkan secara langsung dengan rentetan "rentetan" yang diinternet, menghasilkan hasil yang benar.

Kesimpulan

Mengisytiharkan rentetan sebagai muktamad dengan pemalar masa kompilasi membawa kepada pengoptimum yang merawat ungkapan sebagai objek String tunggal, membenarkan semakan kesamaan sintaksis (==) dengan literal rentetan sedia ada. Ini menunjukkan pengoptimuman pengkompil dalam Java dan cara ia boleh memberi kesan kepada perbandingan identiti objek.

Atas ialah kandungan terperinci Adakah Mengisytiharkan Rentetan sebagai `akhir` dalam Java Mengubah Bagaimana `==` Membandingkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan