java中的包裝類


    java中有8種基本的數據類型,其中每一種數據類型都對應了一種包裝類。java是純面向對象的語言,在java中的一切東西都可以用對象的形式表示,包括java中的基本數據類型。包裝類中除了Integer和Character外,其他的包裝類都是以java中的基本數據類型的首字母大寫命名的。

    每個包裝類中都有一個靜態的方法來將java的基本數據類型轉換為包裝類,這個靜態方法接受一個對應的基本類型參數然后返回一個包裝類的引用:

int i = 10;
Integer i1 = Integer.valueOf(i);

還有一個實例方法xxxValue()返回該包裝類對應的基本數據類型:

Integer i1 = new Integer(1);
int i2 = i1.intValue();

其中把基本的數據類型轉換成包裝類型我們習慣將其稱之為裝箱,把包裝類型轉換為基本類型我們稱之為拆箱。在java5之后java引入了自動裝箱和拆箱,我們在代碼中可以直接把基本數據賦值給包裝類由java編譯器來幫我們調用對應的valueOf方法和xxxValue方法。

    在包裝類中除了toString方法還有幾個常用的和String有關的方法。除了Character外,每個包裝類中都有一個靜態的ValueOf(String s)方法接受一個字符串返回一個包裝類。

Integer i2 = Integer.valueOf("1");

還有一個靜態的parseXXX(String)方法根據字符串返回基本的數據類型,如:

int i = Integer.parseInt("1");

還有一個靜態的toString方法根據基本的數據類型返回一個字符串:

String s = Integer.toString(1)

    在java中每一個類都有一個共同的父類Object。在Object類中有兩個方法分別是:euqals和hashCode方法。首先我們先來介紹一下equals方法:equals方法是用來判斷當前對象和傳入的參數對象是否相等。其中兩個比較的是對象的內存地址也就是說當兩個引用指向同一個對象時這個方法才會返回true。這個equals的默認實現顯然不符和我們的需求,所以我們需要在我們自己創建的對象中重寫這個方法。在java的包裝類中就默認重寫了這個方法,例如:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
}

這里需要注意的是最好不要用equals方法來判斷兩個Float或者兩個Double是否相等,因為在java中比較浮點類型是將其轉換成二進制比較只有兩個浮點數的二進制完全相同才會返回true。我們知道在計算機中小數的計算是不精確的所以有時會出現雖然數學運算的結果相同但是計算機的運行結果卻不相同導致方法返回結果和我們預期的不同。

    介紹完equals方法我們在來介紹一下hashCode方法。hashCode返回對象的一個hash值,其中一個對象的hashCode值是不能改變的,不同的對象hashCode值可以相等但是最好不等。這里我們需要知道,對於兩個對象如果,如果equals方法返回true那么hashCode值就必須一樣,相反如果兩個對象的hashCode相等,那么equals方法可以返回true也可以返回false。hashCode的默認實現一般是將對象的內存地址轉換為整數。由於equals方法和hashcode方法的關系,當我們重寫equals方法時也必須重寫hashCode方法。關於equals方法和hashCode方法我會在java容器中在詳細的介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM