1. 程式人生 > >Java中int和integer的比較

Java中int和integer的比較

  • Java中,數值型的建立和字串有類似的地方,Integer是Java為了使用物件的屬性和方法給int準備的型別。字串 String s = “bag”; 這樣建立會在常量池中查詢 bag,沒有的話就新建,並不會在堆裡新建。
  • 同樣地,Integer i = 11;也不會在堆裡面新建,最多在數字常量池新建。
  • Java為了提高效率,把一些最常用的數值放到了“數字常量池”,不超過這個範圍的數字都會把引用指向常量池。這個數字常量池的範圍-128~127,超過這個範圍就會去堆。下面的程式碼會說明這個:
public class Demo {
    public static void main(String[] arg) {
        int a = 10;
        int b = 10;
        Integer A = 10;
        Integer B = 10;
        Integer C = new Integer(10);
        Integer D = new Integer(10);
        Integer E = 128;
        Integer F = 128;

        System.out.println(a == b);
        System.out.println(A == B);
        System.out.println(C == D);
        System.out.println(A == C);
        System.out.println(a == C );
        System.out.println(a == A);
        System.out.println(E == F);
    }
}

執行結果:
true //基本資料型別,在棧中指向同一個值
true //和字串一樣,指向常量池的同一個值,不在堆中新建
false //new了兩個integer的物件,兩個記憶體地址不一致。這裡要注意的是 == 的意思。
false //同上
true //涉及 int 和 integer,C 自動拆箱,然後和a進行比較
true //自動拆箱
false //這個就是文章一開始所說的 “常量池溢位”(我編的),即常量池沒有這個玩意兒。。。