Rumah  >  Artikel  >  Java  >  Mengapa Kolam Malar Java merawat nilai Integer secara berbeza untuk nombor yang lebih besar daripada 127?

Mengapa Kolam Malar Java merawat nilai Integer secara berbeza untuk nombor yang lebih besar daripada 127?

Patricia Arquette
Patricia Arquetteasal
2024-11-13 05:05:02328semak imbas

Why does Java's Constant Pool treat Integer values differently for numbers greater than 127?

Gelagat Kolam Malar untuk Nombor Bulat: Memahami Sempadan Berangka

Secara tradisinya, Kolam Malar Java dikenali untuk memperlakukan literal String yang serupa untuk nilai yang sama. Walau bagaimanapun, kelakuan Kolam Malar untuk Integer memperkenalkan perbezaan yang halus. Walaupun ia berlaku untuk nilai sehingga 127, ia berbeza apabila nilai melebihi ambang ini.

Untuk memahami perbezaan ini, adalah penting untuk mengenali perbezaan antara objek pembalut Integer dan nilai int primitif. Apabila anda mengisytiharkan literal integer dalam julat -128 hingga 127, ia secara automatik dimasukkan ke dalam Kolam Malar. Akibatnya, dua pembolehubah yang diperuntukkan kepada nilai yang sama, seperti "Integer i1 = 127; Integer i2 = 127;", akan menunjuk kepada rujukan objek yang sama, yang membawa kepada hasil jangkaan "i1 == i2" yang menilai kepada benar.

Walau bagaimanapun, memasukkan nilai int ke dalam objek Integer mengubah dinamik ini sepenuhnya. Tidak seperti Strings, Kolam Malar untuk Integer hanya menyimpan nilai literal, bermakna operasi tinju itu sendiri memulakan peruntukan dalam timbunan Java. Pertimbangkan coretan berikut: "Integer i1 = new Integer(127); Integer i2 = new Integer(127);". Dalam kes ini, walaupun kedua-dua pembolehubah mewakili nilai yang sama, ia tidak dimasukkan ke dalam Kolam Malar dan oleh itu merupakan objek yang berbeza. Perbezaan ini ditunjukkan dalam "i1 == i2" yang menilai kepada palsu.

Kini, tipu daya timbul apabila literal integer melintasi ambang 127. Pada ketika ini, Kolam Malar tidak lagi melatih nilai, tidak kira sama ada nilai itu dikotak-katikkan atau tidak. Ini jelas dalam contoh: "Integer i1 = 128; Integer i2 = 128;", di mana kedua-dua pembolehubah merujuk kepada contoh objek yang berbeza dan "i1 == i2" menilai kepada palsu.

Jusifikasi untuk perubahan ini dalam tingkah laku terletak pada pragmatik pelaksanaan yang digariskan dalam Spesifikasi Bahasa Java (JLS). Walaupun JLS menjamin pengoptimuman memori untuk julat kecil nilai terkumpul, ia membenarkan julat yang lebih luas mengikut budi bicara pelaksanaan. Kebanyakan Mesin Maya Java (JVM) memilih untuk menggunakan julat yang lebih luas, memanfaatkan teknik seperti caching malas atau bersemangat, menghasilkan peningkatan prestasi tanpa menjejaskan jangkaan tingkah laku untuk kes penggunaan biasa.

Atas ialah kandungan terperinci Mengapa Kolam Malar Java merawat nilai Integer secara berbeza untuk nombor yang lebih besar daripada 127?. 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