天天看點

java8增強的包裝類

5.1 java8增強的包裝類

自動裝箱(Autoboxing)和自動拆箱(AutoUnboxing)功能

package code;
public class AutoBoxUnboxing{
    public static void main(String [] args){
        //直接把一個基本類型變量賦給Integer對象
        Integer inObj = ;
        //直接把一個boolean類型變量賦給一個Object類型的變量
        Object boolObj = true;
        //直接把一個Integer對象賦給int類型的變量
        int it = inObj;
        if(boolObj instanceof Boolean){
            //先把Object對象強制類型轉換為Boolean類型,再賦給boolean變量
            boolean b = (Boolean)boolObj;
            System.out.println(b);
        }
    }
}
           
當JDK提供了自動裝箱和自動拆箱功能後,大大簡化了基本類型變量和包裝類對象之間的轉換過程

把字元串類型的值轉換為基本類型的值有兩種方式:

1.利用包裝類提供的parseXxx(String s )的靜态方法,(除了Character);

2.利用包裝類提供的Xxx(String s )構造器

将基本類型變量轉換為字元串:

利用String類提供的多個重載valueOf()方法

package code;
public class Primitive2String{
    public static void main(String[] args){
        String intStr = "123";
        //把一個特定字元串轉換成int類型
        int it1 = Integer.parseInt(intStr);
        int it2 = new Integer(intStr);
        System.out.println(it1);
        System.out.println(it2);

        String floatStr = "4.56";
        float ft1 = Float.parseFloat(floatStr);
        float ft2 = new Float(floatStr);
        System.out.println(ft1);
        System.out.println(ft2);

        String ftStr = String.valueOf(f);
        System.out.println(ftStr);

        //把一個boolean變量轉換成String變量
        String boolStr = String.valueOf(true);
        System.out.println(boolStr.toUpperCase());
    }
}
           
如果希望将基本類型裝換成字元串,直接将基本類型和”“進行連接配接運算,系統會自動把基本類型變量轉換成字元串,
package code;
public class WrapperClassCompare{
    public static void main(String[]args){
        Integer a = new Integer();
        System.out.println("6的包裝類執行個體是否大于5.0" + (a > ));

        System.out.println("比較兩個包裝類的執行個體是否相等" + (new Integer() == new Integer()));

        //通過自動裝箱,允許把基本類型指派給包裝類執行個體
        Integer ina = ;
        Integer inb = ;
        System.out.println("兩個2自動裝箱後是否相等:" + (ina == inb));//true
        Integer biga = ;
        Integer bigb = ;
        System.out.println("兩個128自動裝箱後是否相等:" + (biga == bigb));//false

        //兩個boolean類型比較時,true>false
        System.out.println(Boolean.compare(true,false));
        System.out.println(Boolean.compare(true,true));
        System.out.println(Boolean.compare(false,true));
    }

}
           
系統把一個-128~127之間的整數自動裝箱成Integer執行個體,并放入一個名為cache的數組中緩存起來,如果以後把-128~127之間的整數自動裝箱成一個Integer執行個體時,實際上是直接指向對應的數組元素,是以全部相等,但每次把一個不在-128~127範圍内的整數自動裝箱成Integer執行個體時,系統總是重新建立一個Integer執行個體,是以出現上述結果
package code;
public class UnsignedTest{
    public static void main(String[]args){
        byte b = -;
        //将byte類型的-3轉換為無符号整數
        System.out.println("byte類型的-3對應的無符号整型是" + Byte.toUnsignedInt(b));
        //指定使用十六進制解析無符号整數
        int val = Integer.parseUnsignedInt("ab", );
        System.out.println(val);
        //将-12轉換為無符号int型,然後轉換為十六進制的字元串
        System.out.println(Integer.toUnsignedString(-,));
        //将兩個數轉換為無符号整數後相除
        System.out.println(Integer.divideUnsigned(-,));
        //将兩個數轉換為無符号整數相除後求餘
        System.out.println(Integer.remainderUnsigned(-,));
    }
}
           

繼續閱讀