Integer與int類型的關系
“Integer是int的包裝類,int的默認值是0,而Integer的默認值是null(我們經常在代碼中使用的Integer.valueOf() 和xx.intValue()就是自動裝箱和拆箱的過程 ),
需要注意的是Integer里面默認的緩存數字是-128-127,
-
Integer與Integer相互比較,數據在-128-127范圍內,就會從緩存中拿去數據,比較就相等;如果不在這個范圍,就會直接新創建一個Integer對象,使用== 判斷的是兩個內存的應用地址,所以自然不相等。 -
Integer和int類型相比,在jdk1.5,會自動拆箱,然后比較棧內存中的數據
int跟int比較
int數據類型,都是在棧內存中存儲,如果這個數字在棧內存中存在就會直接指向這個內存地址,如果不存在,就會重新開辟內存空間,所以int和int類型的比較,相同的值不會存在內存不等的情況
八個基本數據類型不能看作對象(這點很特殊),存放在棧中。棧內操作速度快,創建銷毀很容易
int跟Integer比較
會自動拆箱,變成int與int對比
Integer跟Integer比較
上面提到Integer里面會有緩存數字
-
在-128~127的范圍內,==會相等,獲取的cache的地址
-
不在上述范圍內,會去new一個對象對比,直接new對象的話,肯定不等於
實戰
int a = 200;
Integer b = 200;
System.out.println(a == b);//會自動拆箱
Integer c = 100;
Integer d = 100;
System.out.println(c == d);//在Integer緩存范圍內,對比的是值
c = 200;
d = 200;
System.out.println(c == d);//超出Integer緩存范圍,對比的對象的內存地址
輸出結果:
true
true
false
