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

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

DDD
DDDasal
2024-12-21 06:41:10334semak imbas

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

Kesaksamaan Integer dalam Java: Membongkar == vs. sama dengan Quandary

Pengenalan autoboxing Java dalam versi 1.5 dibenarkan untuk pertukaran primitif yang mudah jenis seperti int dan kelas pembalut yang sepadan seperti Integer. Walau bagaimanapun, pemerhatian baru-baru ini telah menimbulkan persoalan tentang kesahihan penggunaan == untuk perbandingan nilai Integer.

Pertimbangkan kod berikut:

Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null & cdiCt != cdsCt)
    mismatch = true;

Anehnya, kod ini kadangkala akan menetapkan ketidakpadanan kepada benar walaupun apabila nilai cdiCt dan cdsCt adalah sama. Menggunakan titik putus dalam Eclipse mendedahkan bahawa kedua-dua nilai Integer adalah sama dengan 137, namun ungkapan bersyarat dinilai kepada palsu.

Menukar bersyarat untuk menggunakan equals() sebaliknya:

if (cdiCt != null & cdiCt != null & !cdiCt.equals(cdsCt))

menyelesaikan isu. Ini menimbulkan persoalan: adakah masih tidak dinasihatkan untuk menggunakan == untuk membandingkan dua nilai Integer?

Jawapannya terletak pada caching Java Virtual Machine (JVM) bagi nilai Integer. Untuk meningkatkan prestasi, JVM menyimpan nilai Integer antara -128 dan 127. Ini bermakna apabila anda membandingkan dua nilai Integer dalam julat ini menggunakan ==, nilai tersebut hanya akan sama jika ia merujuk kepada contoh cache yang sama.

Walau bagaimanapun, jika nilai berada di luar julat ini atau tidak dikotak automatik, nilai tersebut akan dianggap sebagai objek yang berbeza. Ini boleh membawa kepada tingkah laku yang tidak dijangka, seperti yang ditunjukkan dalam contoh yang disediakan.

Oleh itu, secara amnya tidak disyorkan untuk bergantung pada == untuk membandingkan nilai Integer, terutamanya apabila nilai tersebut mungkin melebihi julat cache atau jika ketepatan adalah kritikal . Sebaliknya, menggunakan equals() ialah pendekatan yang lebih selamat untuk memastikan perbandingan kesaksamaan yang boleh dipercayai.

Atas ialah kandungan terperinci Perbandingan Integer Java: Bilakah Anda 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