Java中Integer與int對比的一些坑


Integer與int類型的關系

Integer是int的包裝類,int的默認值是0,而Integer的默認值是null(我們經常在代碼中使用的Integer.valueOf() 和xx.intValue()就是自動裝箱和拆箱的過程 ),

需要注意的是Integer里面默認的緩存數字是-128-127

  • IntegerInteger相互比較,數據在-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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM