一、爲什麼會有八大包裝類
packagepackType.Integer;
public class IntegerTest01{
public static void main(String[]args){
}
public void doSome(Object obj){
System.out.println(obj);
}
}
我現在想要往doSome()中傳查詢入進去一個數字,但是數字屬於基本數據類型,而doSome()方法參數的類型時Object。可見Object方法無法接受基本數據類型的數字。那麼該怎麼辦?
這時候,就需要把基本屬於類型包裝一下了,這時候可以傳一個數字對應的包裝類進去,所以可以這樣寫:
packagepackType.Integer;
public class MyMath{
private int no;
public MyMath(intno){
this.no=no;
}
public MyMath(){
}
public int getNo(){
returnno;
}
public void setNo(intno){
this.no=no;
}
@Override
public String toString(){
return String.valueOf(no);
}
}
結果爲
10
但是在實際開發過程中,我們不需要自己寫,SUN公司已經幫我們寫好了。
8中基本數據類型不夠用,所以又提供了包裝類
二、八種包裝類型
基本數據類型 |
包裝類型 |
byte |
Java.lang.Byte |
short |
Java.lang.Short |
Ing
|
Java.lang.Integer |
Long |
Java.lang.Long |
Float
|
Java.lang.Float |
double |
Java.lang.Double |
boolean |
Java.lang.Boolean |
Char |
Java.lang.Character |
三、Integer
(1)Integer構造方法
packagepackType.Number;
public class IntegerTest02{
public static void main(String[]args){
Integer n1=new Integer(100);
System.out.println(n1);
Integer n2=new Integer("123");
System.out.println(n2);
}
}
(2)Integer中的方法
(a)將字符串轉變爲int類型
packagepackType.Number;
public class NumberTest06{
public static void main(String[]args){
int retValue=Integer.parseInt("123");
System.out.println(retValue+100);
}
}
//網頁上文本框中輸入的100實際上是“100”字符串,後臺數據庫中要求100數字,此時java程序需要進行轉換。這時候就需要parseInt方法。
(b)獲取最大值和最小值
packagepackType.Number;
public class IntegerTest03{
public static void main(String[]args){
System.out.println("int的最大值"+Integer.MAX_VALUE);
System.out.println("int的最小值"+Integer.MIN_VALUE);
}
}
結果爲
int的最大值爲2147483647
int的最小值爲-2147483648
(3)裝箱和拆箱
packagepackType.Number;
public class NumberTest01{
public static void main(String[]args){
//100這個基本數據類型,進行構造方法的包裝達到了:基本數據類型向引用數據類型的轉換
//基本數據類型-->引用數據類型(裝箱)
Integer i =new Integer(100);
//將引用數據類型-->基本數據
float f=i.floatValue();
System.out.println(f);
//將引用數據類型--轉換爲-->基本數類型(拆箱)
intt=i.intValue();
System.out.println(t);
}
}
(3)自動裝箱和自動拆箱
(a)
自動裝箱:基本數據類型自動轉化成包裝類。
自動拆箱:包裝類型自動轉換成基本數據類型。
Integer x = 900;
System.out.println(x);
900是基本數據類型
x是包裝類型
基本數據類型--(自動轉換)-->包裝類型:自動裝箱
Int y =x;
System.out.println(y);
x是包裝類型
y是基本數據類型
包裝類型--(自動轉換)-->基本數據類型:自動拆箱
(b)
Integer z = 1000;
System.out.println(z+1);
分析爲什麼沒有報錯?
因爲自動拆箱機制
(c)
Integer a =1000;
Integer b =1000;
System.out.println(a==b);//false
==這個運算符不會自動拆箱
(d)
java中爲了提高程序的執行效率,將-128~127之間的所有包裝對象提前創建好了,放到了一個方法區
的“整數型常量池”當中了,目的是隻要用這個區間的數據不需要再new了,直接從整數型常量池當中取出來。
packagepackType.Number;
public class IntegerTest05{
public static void main(String[]args){
Integer a =128;
Integer b =128;
System.out.println(a==b);
Integer x =127;
Integer y =127;
System.out.println(x==y);
Integer x1 = 126;
Integer x2 = 126;
System.out.println(x1==x2);
}
}
結果爲:
false
true
true
四、Integer、int、String的轉換
總結:其實我感覺Integer和String以及引用類型其實是一樣的,唯一的區別就是Integer在方法區有一個整數型常量池,String在方法區有一個字符串型常量池。這些常量池也就是緩存,目的是更快的開發,提高方便率。Integer在方法區的取值範圍爲-128~127.也就是說,如果我兩個Integer變量都是爲127,他們的equals方法是一樣的,因爲他們指向的地址是一樣的,如果超過了這個範圍,也就需要在堆中創建對象,然後對象地址不一樣,自然變量指向對象的地址也就不一樣了。