Teka-teki Perbandingan Integer dalam Java: == vs. equals()
Dalam Java 1.5 dan seterusnya, Integer boleh dianggap sebagai int primitif nilai dalam banyak senario. Walau bagaimanapun, isu kod baru-baru ini telah menimbulkan persoalan tentang kesahihan menggunakan operator == untuk perbandingan Integer.
Pernyataan Masalah
Pertimbangkan coretan kod berikut:
Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true;
Kod ini nampaknya menetapkan ketidakpadanan kepada benar apabila nilai cdiCt dan cdsCt adalah sama rata. Isu menjadi jelas apabila memeriksa ungkapan boolean: ia menilai kepada palsu apabila nilainya sememangnya sama, tetapi entah bagaimana ketidakpadanan masih ditetapkan kepada benar apabila pelaksanaan diteruskan.
Penyelesaian
Penyelesaian kepada masalah ini adalah dengan menggunakan kaedah equals(). sebaliknya:
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Penjelasan
Pengendali == membandingkan rujukan memori dua objek, manakala kaedah equals() membandingkan nilainya. Untuk jenis primitif seperti int, operator == berfungsi seperti yang diharapkan. Walau bagaimanapun, untuk objek seperti Integer, operator == hanya menyemak sama ada rujukan menghala ke nilai cache yang sama.
JVM menyimpan nilai Integer antara -128 dan 127 atas sebab prestasi. Oleh itu, apabila membandingkan dua Integer menggunakan ==, operator akan mengembalikan benar hanya jika kedua-dua nilai berada dalam julat ini. Dalam senario yang diberikan, nilai mungkin berada di luar julat ini, yang membawa kepada tingkah laku yang tidak dijangka.
Kesimpulan
Semasa menggunakan == untuk membandingkan primitif boleh diterima, ia boleh diterima. disyorkan untuk menggunakan kaedah equals() untuk membandingkan objek yang dibalut seperti Integer. Ini memastikan tingkah laku yang konsisten tanpa mengira nilai yang terlibat.
Sumber Tambahan
Atas ialah kandungan terperinci Perbandingan Integer Java: Bilakah Saya Harus Menggunakan `==` vs. `equals()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!