Rumah >Java >javaTutorial >Perbandingan Integer Java: Bilakah Saya Harus Menggunakan `==` vs. `equals()`?

Perbandingan Integer Java: Bilakah Saya Harus Menggunakan `==` vs. `equals()`?

Barbara Streisand
Barbara Streisandasal
2024-12-26 18:03:11467semak imbas

Java Integer Comparison: When Should I Use `==` vs. `equals()`?

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

  • [Kelas Objek Tidak Boleh Ubah / Pembungkus Caching](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html#Immutable_Objects_.2F_Wrapper_Class_Caching)
  • [Mengapa boleh Pengkompil/JVM hanya membuat autoboxing “hanya bekerja”?](https://stackoverflow.com/questions/12595136/why-cant-the-compiler-jvm-just-make-autoboxing-just-work)

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!

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