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是一個類,類的功能要比一個基本數據類型多得多,所以很多功能都可以依賴包裝類型,但包裝類型也有缺陷,就比如比較的時候會出現問題,所以需要基本數據類型來進行數據的比較。