Java學習筆記(六)--包裝類、基本型別、拆箱、裝箱
阿新 • • 發佈:2019-01-05
基本型別與包裝類
1.java中包括8個基本型別,與之對應的有8個包裝型別,包裝類是針對原生資料型別的包裝
基本型別 包裝型別 byte Byte(Number的子類) short Short(Number的子類) int Integer(Number的子類) long Long(Number的子類) float Float(Number的子類) double Double(Number的子類) character Character(Object的子類) boolean Boolean(Object的子類) 2.區別
- 基本型別是直接用來儲存值的,放在棧中方便快速使用,包裝型別是類,其例項是物件,放在堆中
- 基本型別不是物件,因此沒有方法,包裝型別是類,因此有方法
- 基本型別直接賦值即可,包裝型別需要使用new關鍵字建立
- 包裝型別初始值為null,基本型別初始值不為null,是根據型別而定的
3.為什要需要有包裝型別
包裝型別將基本型別的值包裝在物件中,這樣就可以使用物件的方法操作基本型別,型別之間的轉換需要使用包裝型別的方法才能完成,因此需要有包裝型別。
包裝類 裝箱 拆箱 Byte valueOf(String s)裝箱成包裝類
valueOf(String,int)根據指定進位制裝箱成包裝類
byteValue() Short valueOf() shortValue() Integer valueOf() intValue() Long valueOf() longValue() Float valueOf() floatValue() Double valueOf() doubleValue() Character valueOf() charValue() Boolean valueOf() booleanValue() 使用包裝類的parseXXX方法還可以實現不同型別之間的轉換,如將數字字串轉換為int型別:
int i = Integer.parseInt("23");
拆箱與裝箱
裝箱:將基本型別轉換成包裝類的過程
拆箱:將包裝類轉換成基本型別的過程
在jdk1.5之後提供了自動拆裝箱
來個栗子
public class SimpleTest {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2); //①true
System.out.println(i3==i4); //②false
}
}
①處結果為true,②處為false,原因是什麼呢?(我的jdk是1.8版本的)
Integer i1 = 100;執行的操作是100先通過valueOf()方法進行裝箱操作,Integer.valueOf()的原始碼如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Integer比較特殊,在-128到127之間,會走快取,不在這個區間的數會走new Integer(i),也就是會建立新的物件,因此,100比較的時候是true,200比較的時候是false