Mengapa Gelagat Kolam Malar Integer Berbeza Selepas 127
Kolam malar untuk nombor dalam Java berbeza daripada rentetan. Walaupun hanya pemalar masa kompilasi yang dimasukkan untuk rentetan, sebarang operasi tinju melibatkan kumpulan untuk jenis pembungkus integer.
Sebagai contoh:
int x = 10; int y = x + 1; Integer z = y; // Not a compile-time constant Integer constant = 11; System.out.println(z == constant); // true
JLS menjamin julat kecil nilai terkumpul , dengan pelaksanaan mempunyai pilihan untuk menggunakan julat yang lebih besar.
Secara praktiknya, kebanyakan pelaksanaan menggunakan Integer.valueOf untuk operasi tinju, yang membawa kepada tingkah laku berikut:
Integer x = Integer.valueOf(100); Integer y = Integer.valueOf(100); System.out.println(x == y); // true
Menurut bahagian JLS 5.1.7:
Nilai antara -128 dan 127 akan sentiasa menghasilkan rujukan yang sama apabila dikotak. Ini ialah kompromi praktikal yang memastikan nilai biasa sentiasa tidak dapat dibezakan.
Walau bagaimanapun, tingkah laku berubah untuk nilai di luar julat ini. Atas sebab kecekapan, pelaksanaan mungkin tidak menganggap rujukan dikongsi untuk nilai ini.
Ini memastikan tingkah laku yang diingini dalam kebanyakan situasi tanpa menjejaskan prestasi dengan ketara. Pelaksanaan terhad memori boleh melanjutkan caching untuk merangkumi julat nilai yang lebih luas.
Atas ialah kandungan terperinci Mengapa Nilai Integer Di Luar Julat -128 hingga 127 Berkelakuan Berbeza dalam Kolam Malar Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!