10,異常機制
阿新 • • 發佈:2021-06-30
包裝類
為什麼要用包裝類?
1.某些方法的引數必須是物件,為了讓基本資料型別的資料能作為引數,提供了包裝類
2.包裝類提供了很多功能,如:獲取基本類型範圍的最大值,位元組數的方法
3.可以實現字串和基本資料型別間的轉換
程式碼示例:
public class Demo01 { public static void main(String[] args) { String a="10"; int i = Integer.parseInt(a);//將字串轉換為基本資料型別中的int型別 Integer integer = Integer.valueOf(a);//將字串轉換為Integer包裝類 double v= Double.parseDouble(a);//將字串轉換為基本資料型別中的double型別 Double aDouble = Double.valueOf(a);//將字串轉換為Double包裝類 System.out.println("i="+i); System.out.println("Integer="+integer); System.out.println("v="+v); System.out.println("Double="+aDouble); } }
執行結果:
i=10
Integer=10
v=10.0
Double=10.0
自動裝箱、拆箱
public class Demo02 { public static void main(String[] args) { int i = 10; Integer ii = new Integer(i);//手動將基本資料型別轉換為包裝類 int c = ii.intValue();//手動將包裝類轉換為基本資料型別 //jdk1.5以後:自動裝箱(基本資料型別-->包裝類) Integer a=i;//底層使用Integer.valueOf()完成自動裝箱,Integer.valueOf()其實也是通過new Integer()實現的 //jdk1.5以後:自動拆箱(包裝類-->基本資料型別) int b=a;//底層使用intValue()完成自動拆箱 } }
注意
1.jdk1.5之後,增加了自動裝箱,自動拆箱功能
2.自動裝箱時呼叫的valueOf()方法,valueOf()底層其實調的還是new Integer()方法
3.自動拆箱調的xxxVaule()方法
4.包裝類在自動裝箱時為了提高效率,對於-128~127之間的值進行了快取處理。超過範圍後,物件之間不能在使用==進行數值的比較,而是使用equals方法
valueOf原始碼: public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);//超出-128~127範圍的會建立物件 }
程式碼示例
public class Demo03 {
public static void main(String[] args) {
int a=10;
Integer b=10;
//==比較的地址,equals比較的值
System.out.println(a==b);// true + - * / == 型別不一樣時,會自動拆箱
System.out.println(b.equals(a));//true
Integer aa=new Integer(10);
Integer bb=new Integer(10);
System.out.println(aa==bb);//false,地址不同
System.out.println(aa.equals(bb));//true
Integer aaa=125;
Integer bbb=125;
System.out.println(aaa==bbb);//true,快取中取
System.out.println(aaa.equals(bbb));//true
Integer aaaa=130;
Integer bbbb=130;
System.out.println(aaaa==bbbb);//false,地址不同
System.out.println(aaaa.equals(bbbb));//true
}
}