Rumah > Java > javaTutorial > Bagaimanakah Mengisytiharkan Rentetan sebagai `akhir` Mempengaruhi Perbandingan `==` di Jawa?

Bagaimanakah Mengisytiharkan Rentetan sebagai `akhir` Mempengaruhi Perbandingan `==` di Jawa?

Susan Sarandon
Lepaskan: 2024-11-29 07:49:09
asal
370 orang telah melayarinya

How Does Declaring Strings as `final` Affect `==` Comparison in Java?

Memahami Kesan Akhir pada Perbandingan Rentetan dalam Java

Di Jawa, kesamaan rentetan biasanya ditentukan menggunakan kaedah equals() . Walau bagaimanapun, operator == juga boleh digunakan untuk perbandingan, tetapi kelakuannya berbeza apabila berurusan dengan rentetan akhir.

Apabila pembolehubah Rentetan diisytiharkan muktamad dan dimulakan dengan ungkapan pemalar masa kompilasi, ia menjadi pemalar pembolehubah dan nilainya diselaraskan oleh pengkompil. Inlining ini membawa kepada perbezaan yang ketara dalam perbandingan menggunakan ==.

Pertimbangkan contoh kod berikut:

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

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

Perbandingan dalam contoh ini mengembalikan palsu kerana concat ialah objek String baharu yang dibuat pada masa jalan dengan menggabungkan str1 dan str2.

Sekarang, mari kita ubah suai kod dengan mengisytiharkan str1 dan str2 sebagai muktamad:

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

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

Dalam kes ini, perbandingan kembali benar. Ini kerana apabila str1 dan str2 diisytiharkan muktamad, ia menjadi pembolehubah malar dan diselaraskan pada masa penyusunan. Penggabungan dua rentetan juga dikira pada masa penyusunan, menghasilkan objek Rentetan malar dengan nilai "rentetan."

Perbezaan timbul kerana literal rentetan dimasukkan ke dalam Java. Interning melibatkan menyimpan contoh unik objek String dalam kolam untuk rujukan masa hadapan. Apabila Rentetan terakhir diselaraskan pada masa penyusunan dan dibandingkan dengan rentetan literal, rujukan kepada objek String dalam kolam pelatih akan dibandingkan secara langsung, menghasilkan benar.

Ringkasnya, apabila berurusan dengan rentetan akhir yang diisytiharkan dengan ungkapan pemalar masa kompilasi, perbandingan menggunakan == akan kembali benar jika nilai yang digabungkan adalah sama dengan literal rentetan yang lain, disebabkan oleh pengalihan objek String semasa menyusun masa.

Atas ialah kandungan terperinci Bagaimanakah Mengisytiharkan Rentetan sebagai `akhir` Mempengaruhi Perbandingan `==` di Jawa?. 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