int和Integer的區別和聯繫

Java中有8種數據類型,分別爲

boolean,char,byte,short,int,long,float,double。

Java是一個面向對象的編程,爲了更好的面向對象,JavaJava爲每一個基本數據類型都引入了對應的包裝類型,對應爲

Boolean,Character,Byte,Short,Integer,Long,Float,Double。

下面我們主要通過int和它的包裝類integer來學習他們的區別和聯繫。
最基本的一點區別是:Ingeter是int的包裝類,兩者默認初值不同。int的初值爲0,Ingeter的初值爲null。
Ingeter在賦值時可以用new的方式,也可以直接賦予其int值,這時JVM會自動調用valueOf()函數來使之轉換爲integer類,這一步也可以稱爲裝箱。
當然有裝箱自然就有拆箱

int int1 = 12;
Integer integer1 = new Integer(12);
System.out.println(int1 == integer1);    
//輸出結果爲true

上面的代碼對int和integer進行比較時時true,說明兩者此時轉換成了同一個類型,這裏就是自動將integer拆箱成爲了int類型,所以兩者可以比較。

 Integer integer1 = new Integer(12);
 Integer integer2 = new Integer(12);
 System.out.println(integer1 == integer2);
 //輸出結果爲false

由於兩者都是對象,比較時不會拆箱,會直接進行對象之間的比較,而兩個對象即使參數一樣也不會被認爲相同,所以輸出爲false。

 Integer a = 128;
 Integer b = 128;
 Integer a1 = 127;
 Integer a2 = 127;
 System.out.println(a1 == a2);    //true                        
 System.out.println(a == b);      //false

上面兩者看起來是一模一樣的爲什麼一個是true,一個是false,這是因爲Integer作爲常量時,對於-128到127之間的數,會進行緩存,也就是說int a1 = 127時,在範圍之內,這個時候就存放在緩存中,當再創建a2時,java發現緩存中存在127這個數了,就直接取出來賦值給a2,所以a1 == a2的。當超過範圍就是new Integer()來new一個對象了,所以a、b都是new Integer(128)出來的變量,所以它們不等。
總結一下int是一個基本數據類型,而integer是一個類,類的功能要比一個基本數據類型多得多,所以很多功能都可以依賴包裝類型,但包裝類型也有缺陷,就比如比較的時候會出現問題,所以需要基本數據類型來進行數據的比較。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章