1. 程式人生 > >Java學習筆記(六)--包裝類、基本型別、拆箱、裝箱

Java學習筆記(六)--包裝類、基本型別、拆箱、裝箱

基本型別與包裝類

        1.java中包括8個基本型別,與之對應的有8個包裝型別,包裝類是針對原生資料型別的包裝

                       基本型別                          包裝型別
byteByte(Number的子類)
shortShort(Number的子類)
intInteger(Number的子類)
longLong(Number的子類)
floatFloat(Number的子類)
doubleDouble(Number的子類)
characterCharacter(Object的子類)
booleanBoolean(Object的子類)

2.區別

  • 基本型別是直接用來儲存值的,放在棧中方便快速使用,包裝型別是類,其例項是物件,放在堆中
  • 基本型別不是物件,因此沒有方法,包裝型別是類,因此有方法
  • 基本型別直接賦值即可,包裝型別需要使用new關鍵字建立
  • 包裝型別初始值為null,基本型別初始值不為null,是根據型別而定的

3.為什要需要有包裝型別

 包裝型別將基本型別的值包裝在物件中,這樣就可以使用物件的方法操作基本型別,型別之間的轉換需要使用包裝型別的方法才能完成,因此需要有包裝型別。

               包裝類                 裝箱                拆箱
Byte

valueOf(String s)裝箱成包裝類

valueOf(String,int)根據指定進位制裝箱成包裝類

byteValue()
ShortvalueOf()shortValue()
IntegervalueOf()intValue()
LongvalueOf()longValue()
FloatvalueOf()floatValue()
DoublevalueOf()doubleValue()
CharactervalueOf()charValue()
BooleanvalueOf()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