Rumah > Java > javaTutorial > Mengapakah `==` Kadangkala Gagal Membandingkan Objek `Integer` Dengan Betul di Java?

Mengapakah `==` Kadangkala Gagal Membandingkan Objek `Integer` Dengan Betul di Java?

Barbara Streisand
Lepaskan: 2025-01-02 20:13:39
asal
470 orang telah melayarinya

Why Does `==` Sometimes Fail to Compare `Integer` Objects Correctly in Java?

Misteri Kesaksamaan Integer dalam Java

Apabila Java memperkenalkan autoboxing dalam versi 1.5, penggunaan objek Integer boleh ditukar ganti dengan int primitif. Walau bagaimanapun, telah diperhatikan bahawa menggunakan == untuk perbandingan objek Integer boleh membawa kepada hasil yang tidak dijangka.

Dalam situasi yang membingungkan, penggunaan kod == untuk membandingkan pembolehubah Integer didapati tersalah menetapkan bendera boolean sebagai benar apabila nilai sebenarnya adalah sama. Walau bagaimanapun, menukar perbandingan kepada !cdiCt.equals(cdsCt) telah menyelesaikan isu.

Gelagat luar biasa ini timbul daripada mekanisme caching JVM untuk nilai Integer. Untuk nilai dalam julat -128 hingga 127, JVM menggunakan semula kejadian cache, memastikan penggunaan memori yang cekap. Oleh itu, integer dalam julat ini kelihatan sama tanpa mengira rujukan sebenar mereka.

Apabila menggunakan == untuk membandingkan objek Integer, kesamaan rujukan diperiksa dan bukannya kandungan. Oleh itu, jika kejadian cache digunakan, perbandingan akan kembali benar walaupun rujukan objek adalah berbeza.

Isu ini tidak berlaku apabila menggunakan kaedah equals() kerana ia membandingkan nilai objek, tidak mengambil kira rujukan. Akibatnya, adalah disyorkan untuk menggunakan equals() untuk perbandingan objek Integer, terutamanya apabila julat nilai mungkin melangkaui julat cache atau apabila penentuan kesaksamaan yang tepat diperlukan.

Atas ialah kandungan terperinci Mengapakah `==` Kadangkala Gagal Membandingkan Objek `Integer` Dengan Betul di Java?. 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