一割去、 基本類型包裝類概述
在實際程序使用中窟却,程序界面上用戶輸入的數(shù)據(jù)都是以字符串類型進(jìn)行存儲的。而程序開發(fā)中呻逆,我們需要把字符串?dāng)?shù)據(jù)夸赫,根據(jù)需求轉(zhuǎn)換成指定的基本數(shù)據(jù)類型,如年齡需要轉(zhuǎn)換成int類型咖城,考試成績需要轉(zhuǎn)換成double類型等茬腿。那么呼奢,想實現(xiàn)字符串與基本數(shù)據(jù)之間轉(zhuǎn)換怎么辦呢?
Java中提供了相應(yīng)的對象來解決該問題切平,基本數(shù)據(jù)類型對象包裝類:java將基本數(shù)據(jù)類型值封裝成了對象握础。封裝成對象有什么好處?可以提供更多的操作基本數(shù)值的功能悴品。
8種基本類型對應(yīng)的包裝類如下:
其中需要注意int對應(yīng)的是Integer弓候,char對應(yīng)的Character,其他6個都是基本類型首字母大寫即可他匪。
基本數(shù)據(jù)類型對象包裝類特點:用于在基本數(shù)據(jù)和字符串之間進(jìn)行轉(zhuǎn)換菇存。
二、基本類型和String的相互轉(zhuǎn)換
-
將字符串轉(zhuǎn)成基本類型:
parseXXX.png
parseXXX(String s);其中XXX表示基本類型邦蜜,參數(shù)為可以轉(zhuǎn)成基本類型的字符串依鸥,如果字符串無法轉(zhuǎn)成基本類型,將會發(fā)生數(shù)字轉(zhuǎn)換的問題 [NumberFormatException]悼沈。
System.out.println(Integer.parseInt("123") + 2);
//打印結(jié)果為 125
- 將基本數(shù)值轉(zhuǎn)成字符串有3種方式:
- 基本類型直接與””相連接即可贱迟;34+""
-
調(diào)用String的valueOf方法;String.valueOf(34) 絮供;
基本類型轉(zhuǎn)String.png
-
調(diào)用包裝類中的toString方法衣吠;Integer.toString(34) ;
toString方法.png
三壤靶、 基本數(shù)據(jù)類型和包裝類的相互轉(zhuǎn)換
使用int類型與Integer對象轉(zhuǎn)換進(jìn)行演示缚俏,其他基本類型轉(zhuǎn)換方式相同。
-
基本數(shù)值---->包裝對象
integer.png
Integer i = new Integer(4);//使用構(gòu)造函數(shù)函數(shù)
Integer ii = new Integer("4");//構(gòu)造函數(shù)中可以傳遞一個數(shù)字字符串
Integer iii = Integer.valueOf(4);//使用包裝類中的valueOf方法
Integer iiii = Integer.valueOf("4");//使用包裝類中的valueOf方法
-
包裝對象---->基本數(shù)值
int.png
int num = i.intValue();
四贮乳、自動拆裝箱
在需要的情況下忧换,基本類型與包裝類型可以通用。有些時候我們必須使用引用數(shù)據(jù)類型時向拆,可以傳入基本數(shù)據(jù)類型亚茬。
比如:
基本類型可以使用運算符直接進(jìn)行計算,但是引用類型不可以浓恳。而基本類型包裝類作為引用類型的一種卻可以計算刹缝,原因在于,Java”偷偷地”自動地進(jìn)行了對象向基本數(shù)據(jù)類型的轉(zhuǎn)換颈将。
相對應(yīng)的梢夯,引用數(shù)據(jù)類型變量的值必須是new出來的內(nèi)存空間地址值,而我們可以將一個基本類型的值賦值給一個基本類型包裝類的引用吆鹤。原因同樣在于Java又”偷偷地”自動地進(jìn)行了基本數(shù)據(jù)類型向?qū)ο蟮霓D(zhuǎn)換厨疙。
? 自動拆箱:對象轉(zhuǎn)成基本數(shù)值
? 自動裝箱:基本數(shù)值轉(zhuǎn)成對象
Integer i = 4;//自動裝箱。相當(dāng)于Integer i = Integer.valueOf(4);
i = i + 5; //等號右邊:將i對象轉(zhuǎn)成基本數(shù)值(自動拆箱) i.intValue() + 5; 加法運算完成后,再次裝箱沾凄,把基本數(shù)值轉(zhuǎn)成對象梗醇。
? 自動裝箱(byte常量池)細(xì)節(jié)的演示
當(dāng)數(shù)值在byte范圍之內(nèi)時,進(jìn)行自動裝箱撒蟀,不會新創(chuàng)建對象空間而是使用原來已有的空間叙谨。
Integer a = new Integer(3);
Integer b = new Integer(3);
System.out.println(a==b);//false
System.out.println(a.equals(b));//true
System.out.println("---------------------");
Integer x = 127;
Integer y = 127;
//在jdk1.5自動裝箱時,如果數(shù)值在byte范圍之內(nèi)保屯,不會新創(chuàng)建對象空間而是使用原來已有的空間手负。
System.out.println(x==y); //true
System.out.println(x.equals(y)); //true