Java中int和integer的比較
阿新 • • 發佈:2018-11-20
- 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 //這個就是文章一開始所說的 “常量池溢位”(我編的),即常量池沒有這個玩意兒。。。