03_包裝類

美的梦里国發表於2024-07-26

一、包裝類

基本資料型別和包裝型別的對應關係:

二、型別轉換

裝箱:把基本型別轉換為引用型別;拆箱:引用型別轉換為基本型別

public class demo01 {
    public static void main(String[] args) {
//        基本型別
        int number = 10;

//        型別轉換:基本型別轉換成引用型別
        Integer integer1 = Integer.valueOf(number);
        System.out.println(integer1.getClass());
        
//        型別轉換:引用型別轉換成基本型別
        int i = integer1.intValue();
        System.out.println(i);

        
        
        //JDK1.5之後自動裝箱、自動拆箱
        int number2 = 30;
        Integer integer2 = number2;
        int i2 = integer2;
        System.out.println(integer2.getClass());
        System.out.println(i2);
    }
}
parseXXX()靜態方法

XXX表示一種型別(八種基本型別),該方法可實現字串基本型別的轉換。要注意字串轉基本型別時,boolean字串形式,只有字串為"true"時,轉換的基本型別才為true,否則為false。

public class demo02 {
    public static void main(String[] args) {

//        基本型別轉字串
        int num = 10;
        //1.1 直接+""
        String str1 = num + "";
        //1.2 使用Integer中的toString()方法
        String str2 = Integer.toString(num);

        System.out.println(str1.getClass());
        System.out.println(str2.getClass());


//        字串轉換基本型別
        String str3 = "20";
        //使用Integer.parseXXX()
        int i1 = Integer.parseInt(str3);
        System.out.println(i1);

        //boolean字串形式轉成基本型別,"true"--->true, 非"true"--->false
        String str4 = "true";
        String str5 = "treu";
        boolean b1 = Boolean.parseBoolean(str4);
        boolean b2 = Boolean.parseBoolean(str5);
        System.out.println(b1);
        System.out.println(b2);
    }
}

三、Integer緩衝區

public class demo03 {
    public static void main(String[] args) {
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2);	//false

        Integer integer3 = 100;
        Integer integer4 = 100;
        System.out.println(integer3 == integer4);	//true

        Integer integer5 = 200;
        Integer integer6 = 200;
        System.out.println(integer5 == integer6);	//false
    }
}

"=="對基本型別比較的是值,對引用型別比較的是地址。

integer1和integer2結果為false:引用型別比較的是地址而不是值,很明顯integer1和integer2地址不同;

integer3和integer4結果為true:這裡對這兩個物件賦值採用的是java的自動裝箱,呼叫了Integer.valueOf()方法,100在cache[]的範圍內,cache[]是直接儲存在堆中的,所以可以直接取值。

integer5和integer6結果為false:雖說和”integer3和integer4“的方法是一樣的,但是因為呼叫的Integer.valueOf()方法,超過了valueOf()方法的範圍,所以就是new了一個引用,所以指向的地址就不用。

valueOf()原始碼:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

這裡low=-128,high=127,存在一個Integer型別的cache[]陣列。

相關文章