Mengapa dalam Java, apabila memberikan pembolehubah i3, i4 dengan jenis data yang sama, System.out.println(i3==i4), output akhir tidak sama?
黄舟
黄舟 2017-06-28 09:24:50
0
2
1094

System.out.println(i3==i4), mengapa keputusan output tidak benar

class Demo
{
  public static void main(String[] arge)
{ 
  Integer i1=100;
  Integer i2=100;
  Integer i3=200;
  Integer i4=200;
  System.out.println(i1==i2);
  System.out.println(i3==i4);
}
}

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(2)
迷茫

Pertama sekali, kita tahu bahawa jenis objek membandingkan alamat memori yang dirujuknya semasa melakukan ==. Jadi dalam demo poster asal, pada dasarnya, i1==i2 dan i3==i4 membandingkan alamat memori yang mereka rujuk, yang sepatutnya kedua-duanya palsu. Walau bagaimanapun, Java memperkenalkan mekanisme caching Integer dalam Java5 Apabila pembangun menggunakan jenis Integer, jika nilai yang ditentukan adalah antara -128~127, rujukan akan dihalakan terus ke objek cache yang dibuat.

Dalam demo poster, kedua-dua pembolehubah i1 dan i2 adalah antara -128~127, jadi rujukan kedua-dua pembolehubah menghala ke contoh objek yang sama (alamat memori yang sama), jadi benar dikembalikan, manakala dua pembolehubah i3 dan i4 Nilainya bukan antara -128~127, jadi jvm mencipta contoh objek baharu (alamat memori yang berbeza) untuk kedua-dua jenis objek berkotak secara automatik ini, jadi ia mengembalikan palsu.

Nilai maksimum mekanisme cache Integer boleh dilaraskan melalui parameter jvm -XX:AutoBoxCacheMax=size. Untuk butiran dan prinsip Integer, sila rujuk blog ini. http://blog.csdn.net/u0110040...

黄舟

Kelas pembungkus plastik akan cache objek integer dari 0 hingga 150, jadi jika kurang daripada 150, cache akan digunakan semasa tinju 100 ialah objek dalam cache, dan 200 ialah objek yang baru dibuat

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan