Rumah >Java >javaTutorial >Mengapakah Kesamaan `Integer` Kadangkala Mengembalikan `palsu` di Jawa?

Mengapakah Kesamaan `Integer` Kadangkala Mengembalikan `palsu` di Jawa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 03:08:13358semak imbas

Why Does `Integer` Equality Sometimes Return `false` in Java?

Caching Integer dalam Java: Memahami Pengoptimuman

Pemerhatian terkini telah menimbulkan kekeliruan mengenai kelakuan objek Integer di Java. Contoh kod menunjukkan bahawa pengendali kesamaan mengembalikan "salah" untuk dua kejadian Integer bersamaan dengan 1000 tetapi "benar" untuk dua kejadian bersamaan dengan 100.

Paradoks yang kelihatan ini berpunca daripada mekanisme caching Java untuk integer. Untuk mengoptimumkan prestasi dan mengurangkan jejak memori, Java Virtual Machine (JVM) menyimpan objek Integer untuk nilai antara -128 dan 127. Ini bermakna rujukan kepada kejadian Integer dalam julat ini sentiasa sama.

Oleh itu, dalam coretan kod kedua, di mana kejadian Integer mewakili nilai 100, kedua-dua "c" dan "d" menunjuk ke objek cache yang sama, menghasilkan dalam "benar" apabila membandingkan kesamarataan mereka. Walau bagaimanapun, untuk nilai di luar julat ini, seperti 1000, objek Integer berbeza dicipta, maka hasil perbandingan "palsu".

Pengoptimuman ini menjejaskan prestasi dengan mengurangkan penggunaan memori, yang membawa kepada penggunaan cache yang lebih cekap. Ia juga menghapuskan overhed mencipta objek baharu untuk integer yang kerap digunakan, menjadikan pelaksanaan kod lebih cepat.

Kajian lanjut mengenai topik ini boleh didapati dalam sumber berikut:

  • [Oracle's Java Penalaan Prestasi Garis Panduan](https://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-tuning-6.html#integer_caching)
  • [Pengoptimuman Aritmetik Integer dalam Java dan C ](https://coincidental.com/research/number-boxes.pdf)

Atas ialah kandungan terperinci Mengapakah Kesamaan `Integer` Kadangkala Mengembalikan `palsu` di Jawa?. 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