cari

Rumah  >  Soal Jawab  >  teks badan

Mengapa dalam Java, apabila memberikan pembolehubah i3, i4 dengan jenis data yang sama, System.out.println(i3==i4), output akhir tidak sama?

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);
}
}

黄舟黄舟2814 hari yang lalu1140

membalas semua(2)saya akan balas

  • 迷茫

    迷茫2017-06-28 09:26:50

    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...

    balas
    0
  • 黄舟

    黄舟2017-06-28 09:26:50

    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

    balas
    0
  • Batalbalas