Apakah perbezaan dalam cara jenis asas Java disimpan sebagai pembolehubah tempatan dan pembolehubah ahli?
世界只因有你
世界只因有你 2017-05-27 17:41:41
0
1
582

1. Soalan ini mungkin melibatkan banyak aspek Saya mempelajarinya sendiri dan memahami sebahagian daripadanya, tetapi beberapa bahagian masih tidak jelas. Tampalkan kod dahulu (Java versi 1.8):

public class Test{
    int abc1 = 127;
    Integer abd1 = 127;
    Integer abf1 = 127;
    Integer abe1 = new Integer(127);
    {
        System.out.print("1\t");
        System.out.println(abc1==abd1);
        System.out.print("2\t");
        System.out.println(abd1==abe1);
        System.out.print("3\t");
        System.out.println(abc1==abe1);
        System.out.print("4\t");
        System.out.println(abd1==abf1);
    }

    int abc2 = 128;
    Integer abd2 = 128;
    Integer abf2 = 128;
    Integer abe2 = new Integer(128);
    {
        System.out.print("5\t");
        System.out.println(abc2==abd2);
        System.out.print("6\t");
        System.out.println(abd2==abe2);
        System.out.print("7\t");
        System.out.println(abc2==abe2);
        System.out.print("8\t");
        System.out.println(abd2==abf2);
    }

    public static void main(String[] args){
        Test t =new Test();
    }
/*输出为:
1       true
2       false
3       true
4       true
5       true
6       false
7       true
8       false
*/
}

2 Biar saya bercakap tentang bahagian yang saya tahu dengan jelas dahulu: keluaran ke-4 dan keluaran ke-8 agak jelas. Ini kerana terdapat kolam malar dalam timbunan Java untuk menyimpan literal jenis data asas yang biasa digunakan ini boleh menyimpan integer (-128 hingga 127) dan jenis Boolean (tiada jenis berganda). Apabila melaksanakan "Integer abd1=127", selain mencipta objek Integer dengan nilai 127 dalam timbunan, ia juga akan menyimpan 127 dalam kolam pemalar yang sepadan, dan kemudian mengaitkan objek Integer ini dengan 127 dalam kolam malar "Integer abf1=127" dilaksanakan sekali lagi, sebagai tambahan kepada mencipta objek, ia juga dikaitkan dengan 127 dalam kolam malar, jadi membandingkan kedua-dua pulangan benar. 128 adalah berbeza Memandangkan ia melebihi julat storan kumpulan malar, hanya dua rujukan Integer i1 dan i2 dibandingkan, jadi palsu dikembalikan.

3 Soalan saya ialah: Bagaimana untuk menyimpan jenis int (bukan statik, bukan akhir) dalam pembolehubah ahli objek. Dalam erti kata lain, apabila objek Teks t dicipta, adakah abc1 (abc2 serupa dengan ini) disimpan secara langsung pada timbunan atau dibungkus dan disimpan dalam timbunan Mengapa 1-3 (atau 5-7) muncul? benar, salah, benar".

世界只因有你
世界只因有你

membalas semua(1)
给我你的怀抱

Apabila int dibandingkan dengan Integer, Integer akan dinyahkotak secara automatik dan dibandingkan dengan int
Pembolehubah instance objek kedua diperuntukkan pada timbunan
1 dan 5 dibandingkan kerana jenis Integer dinyahkotak secara automatik. jadi ia adalah benar

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