1. 程式人生 > >JavaSE基礎之包裝類

JavaSE基礎之包裝類

獲取 原因 不用 處理 obj stat san 必須 的確

一.概念:

Java語言的8種基本類型分別對應了8種“包裝類”。每一種包裝類都封裝了一個對應的基本類型成員變量,同時還提供了針對該數據類型的實用方法。
1)包裝類的目的:用於將基本類型數據當作引用類型看待。
2)包裝類的名字:除了Integer(int),Character(char)外,其余包裝類名字都是基本類型名首字母大寫。
3)拆、裝箱:Integer i=new Integer(1);創建一個以對象形式存在的整數1,這種從基本類型轉為引用類型的過程稱之為“裝箱”,反之叫“拆箱”。
4)裝箱:方式一:Double d=new Double(2.2);//裝箱


方式二:Double d=Double.valueOf(2.2);//基本類型都有valueOf方法
5)拆箱:double num=d.doubleValue();//拆箱
6)包裝類使用前提:JDK1.5+
public static void say(Object obj){ System.out.println(obj); }
int a=1;//基本類型,不是Object子類!
say(a);//在java 1.4版本的時候,這裏還是語法錯誤的!因為int是基本類型,不是Object對象,要自己寫8種基本類型對應的方法

7)包裝類的使用:實例化一個對象,該對象代表整數1;Integer的作用是讓基本類型int作為一個引用類型去看待。這樣就可以參與到面向對象的編程方式了。由此我們可以將一個int當作一個Object去看待了,也成為了Object的子類。
Integer i=new Integer(a);//裝箱,或者寫Integer i=new Integer(1);
Integer ii=Integer.valueOf(a);//裝箱另一種方式
int num=i.intValue();//拆箱 say(i);//Integer是Object的子類,可以調用!

8)JDK1.5包裝類自動拆裝箱(原理):

在編譯源程序的時候,編譯器會預處理,將未作拆箱和裝箱工作的語句自動拆箱和裝箱。可通過反編譯器發現。
say(Integer.valueOf(a));自動裝箱 num=i;//引用類型變量怎麽能復制給基本類型呢?
//num=i.intValuse();//自動拆箱
9)包裝類的一些常用功能:將字符串轉換為其類型,方法是:parseXXX,XXX代表其類型。這裏要特別註意!一定要保證待轉換的字符串描述的確實是或者兼容要轉換的數據類型!否則會拋出異常!
String numStr="123"; System.out.println(numStr+1);//1231
int num=Integer.parseInt(numStr); System.out.println(num+1)//124
long longNum=Long.parseLong(numStr); System.out.println(longNum);//123
double doubleNum=Double.parseDouble(numStr); System.out.println(doubleNum);//123.0
10)Integer提供了幾個有趣的方法:

將一個整數轉換為16進制的形式,並以字符串返回;將一個整數轉換為2進制的形式,並以字符串返回。
String bStr=Integer.toBinaryString(num); String hStr=Integer.toHexString(num);
11)所有包裝類都有幾個共同的常:獲取最大、最小值。
int max=Integer.MAX_VALUE;//int最大值 int min=Integer.MIN_VALUE;//int最小值
System.out.println(Integer.toBinaryString(max)); System.out.println(Integer.toBinaryString(min));

二.代碼

/**
 * 包裝類
 * 基本類型由8個,由於他們是以值的形式存在,沒有繼承
 * 也不是引用類型,所以不繼承自Object。
 * 那麽基本類型是不能參與面向對象開發的。
 * 包裝類的作用主要解決了基本類型不能參與面向對象開發
 * 的問題。
 *
 * 其中6個表示數字的包裝類全部繼承自Number類
 * Number類中定義了:
 * int intValue()
 * 將當前對象表示的數字已基本類型的int值返回
 *
 * double doubleValue()
 * 將當前對象表示的數字已基本類型的double值返回
 * ...6個數字類型的方法全有
 *
 *
 */
public class IntegerDemo {
    public static void main(String[] args) {
        //該對象表示小數1.2
        Double doub = new Double(1.2);

        double d = doub.doubleValue();
        System.out.println(d);//1.2

        //還可以轉換為其他的基本類型數據,但可能丟失精度
        int i = doub.intValue();
        System.out.println(i);//1

    }

}

/**
 * 數字包裝類有兩個常量,分別表示其對應的基本類型
 * 數據的取值範圍:
 * MIN_VALUE
 * MAX_VALUE
 *
 */
public class IntegerDemo2 {
    public static void main(String[] args) {
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        System.out.println(max);
        System.out.println(min);

    }
}

/**
 * 包裝類最常用的一個方法
 * 數字包裝類有一個靜態方法:parseXXX()
 * 可以將字符串轉換為對應的基本類型
 * @author Administrator
 *
 */
public class IntegerDemo3 {
    public static void main(String[] args) {
        String intStr = "123";
        /*
         * 若想將字符串轉換為對應的數字,前提是該字符串
         * 描述的所有字符必須表示當前類型的數字才可以!
         */
        int i = Integer.parseInt(intStr);
        System.out.println(i+1);

        double d = Double.parseDouble(intStr);
        System.out.println(d);
    }
}


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

        dosome(1);
        /*
         * java自1.5之後推出了一個新的特性
         * 自動拆裝箱
         * 有了這個特性後,我們在寫程序的時候就不用特別
         * 註意基本類型與對應的包裝類互轉的問題了。
         * 但是這個不是JVM認可的。而是編譯器認可的,原因
         * 在於編譯器將轉換的代碼幫我們補全後寫入了字節碼
         * 文件中。
         */
        /*
         * 這裏就用到了自動裝箱特性
         * 編譯器在生成字節碼文件時,將代碼改為了:
         * Integer inte = Integer.valueOf(1);
         */
        Integer inte = 1;

        /*
         * 這裏就用到了自動拆箱特性
         * 編譯器在生成字節碼文件時,將代碼改為了:
         * int i = inte.intValue();
         */
        int i = inte;

    }

    public static void dosome(Object o){

    }
}

/**
 * 基本類型轉換為包裝類時建議使用
 * 靜態方法 valueOf()
 * @author Administrator
 *
 */
public class IntegerDemo5 {
    public static void main(String[] args) {
            /*
             * valueOf在有些包裝類中會重用對象
             * 比如Integer,會緩存1字節的整數。-128到127之間
             */
            Integer i1 = Integer.valueOf(1);
            Integer i2 = Integer.valueOf(1);

            System.out.println(i1==i2);

            System.out.println(i1.equals(i2));


    }
}

JavaSE基礎之包裝類