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
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
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!