【Java】基本型別包裝類

love_Aym發表於2018-04-03

部分轉載:

https://blog.csdn.net/hjf19790118/article/details/7081925

https://blog.csdn.net/gfdonx/article/details/48787187

http://www.cnblogs.com/kelin1314/archive/2010/09/11/1824145.html


一、為什麼會有基本型別包裝類

  • Java語言是一個物件導向的語言,但是Java中的基本資料型別卻是不物件導向的,這在實際使用時存在很多的不便,為了解決這個不足,在設計類時為每個基本資料型別設計了一個對應的類進行代表,這樣八個和基本資料型別對應的類統稱為包裝類(Wrapper Class),有些地方也翻譯為外覆類或資料型別類。
  • 將基本資料型別封裝成物件的好處在於可以在物件中定義更過的功能方法操作該資料
  • java 提供兩種不同的型別:引用型別(或者封裝型別,Warpper)和原始型別(或內建型別,Primitive)。Int是java的原始資料型別,Integer是java為int提供的封裝類。Java為每個原始型別提供了封裝類。 
  • 引用型別和原始型別的行為完全不同,並且它們具有不同的語義。引用型別和原始型別具有不同的特徵和用法,它們包括:大小和速度問題,這種型別以哪種型別的 資料結構儲存,當引用型別和原始型別用作某個類的例項資料時所指定的預設值。物件引用例項變數的預設值為 null,而原始型別例項變數的預設值與它們的型別有關。
  • 基本型別儲存在棧中,因此它們的存取速度要快於儲存在堆中的對應包裝類的例項物件。從Java5.0(1.5)開始,JAVA虛擬機器(Java Virtual Machine)可以完成基本型別和它們對應包裝類之間的自動轉換。因此我們在賦值、引數傳遞以及數學運算的時候像使用基本型別一樣使用它們的包裝類,但這並不意味著你可以通過基本型別呼叫它們的包裝類才具有的方法。另外,所有基本型別(包括void)的包裝類都使用了final修飾,因此我們無法繼承它們擴充套件新的類,也無法重寫它們的任何方法。

二、常用的操作之一

  • 用於基本資料型別與字串之間的轉換。

三、包裝類介紹(8種)
  • byte → Byte
  • short  Short
  • int  Integer(特殊)
  • long   Long
  • float  Float
  • double  Double
  • char  Character(特殊)
  • boolean  Boolean

注意:在這八個類名中,除了IntegerCharacter類以後,其它六個類的類名和基本資料型別一直,只是類名的第一個字母大寫即可。


四、主要作用

1.作為和基本資料型別對應的類型別存在,方便涉及到物件的操作。

2.包含每種基本資料型別的相關屬性如最大值、最小值等,以及相關的操作方法。

五、主要方法

  由於八個包裝類的使用比較類似,下面以最常用的Integer類為例子介紹包裝類的實際使用。

      1、實現intInteger類之間的轉換

在實際轉換時,使用Integer類的構造方法和Integer類內部的intValue方法實現這些型別之間的相互轉換,實現的程式碼如下:

                   int n = 10;

                   Integer in = new Integer(100);

                   //int型別轉換為Integer型別

                   Integer in1 = new Integer(n);

                   //Integer型別的物件轉換為int型別

                   int m = in.intValue();

         2Integer類內部的常用方法

                  Integer類內部包含了一些和int操作有關的方法,下面介紹一些比較常用的方法:

                   aparseInt方法

                            public static int parseInt(String s)

該方法的作用是將數字字串轉換為int數值。在以後的介面程式設計中,將字串轉換為對應的int數字是一種比較常見的操作。使用示例如下:

                                     String s = “123”;

                                     int n = Integer.parseInt(s);

int變數n的值是123,該方法實際上實現了字串和int之間的轉換,如果字串都包含的不是都是數字字元,則程式執行將出現異常。(說明:異常的概念將在下一章進行講述)

另外一個parseInt方法:

         public static int parseInt(String s, int radix)

則實現將字串按照引數radix指定的進位制轉換為int,使用示例如下:

         //將字串”120”按照十進位制轉換為int,則結果為120

         int n = Integer.parseInt(“120”,10);

         //將字串”12”按照十六進位制轉換為int,則結果為18

         int n = Integer.parseInt(“12”,16);

         //將字串”ff”按照十六進位制轉換為int,則結果為255

         int n = Integer.parseInt(“ff”,16);

這樣可以實現更靈活的轉換。


注意:基本資料型別包裝類中有八種,其中7種都有parseXxx的方法。將字串轉換成xxx型。

只有Character類中沒有,因為字串中有多個字元,放在一個char裡是裝不下的。字串到字元的轉換可以通過toCharArray()方法就可以把字串轉換成字元陣列。


                   btoString方法

                            public static String toString(int i)

                            該方法的作用是將int型別轉換為對應的String型別。

                            使用示例程式碼如下:

                                     int m = 1000;

                                     String s = Integer.toString(m);

                            則字串s的值是”1000”

                            另外一個toString方法則實現將int值轉換為特定進位制的字串:

                                     public static int parseInt(String s, int radix)

                            使用示例程式碼如下:

                                     int m = 20;

                                     String s = Integer.toString(m);

                            則字串s的值是”14”

         其實,JDK自從1.5(5.0)版本以後,就引入了自動拆裝箱的語法,也就是在進行基本資料型別和對應的包裝類轉換時,系統將自動進行,這將大大方便程式設計師的程式碼書寫。使用示例程式碼如下:

                   //int型別會自動轉換為Integer型別

                   int m = 12;

                   Integer in = m;

                   //Integer型別會自動轉換為int型別

                   int n = in;

         所以在實際使用時的型別轉換將變得很簡單,系統將自動實現對應的轉換。


六、java基本型別和包裝類的區別

int 是基本型別,直接存數值 。Integer是類,產生物件時用一個引用指向這個物件。
Java把記憶體劃分成兩種:一種是棧記憶體,另一種是堆記憶體 
在函式中定義的一些基本型別的變數和物件的引用變數都是在函式的棧記憶體中分配 
而實際的物件是在儲存堆記憶體中。即 
     int i = 5;//直接在棧中分配空間 
    Integer i = new Integr(5);//物件是在堆記憶體中,而i(引用變數)是在棧記憶體中 
在堆中分配的記憶體,由java虛擬機器的自動垃圾回收器來管理。
因為在堆中分配空間所需的時間遠大於從棧中分配儲存空間,所以JAVA速度比C 慢。


七、java有自動封裝功能,以下是一些構造及常用方法

package test1;  
  
public class PackagClass {  
  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
          
        //包裝類,每一個基本型別都有對應的包裝類,  
        //並且都有一個將基本型別建立成包裝類的構造方法。  
        Boolean bobj = new Boolean(true);  
        Integer iobj = new Integer(1);  
        Long lobj = new Long(1);  
        Short sobj = new Short((short) 1);  
        Character cobj = new Character('a');  
        Float fobj = new Float(1.0f);  
        Double dobj = new Double(1.0);  
        Byte byobj = new Byte((byte) 1);  
          
        //每個包裝類都有一個valueOf()方法,用於將字串轉成相應的包相類  
        System.out.println(Boolean.valueOf("false"));  
        System.out.println(Integer.valueOf("1"));  
        System.out.println(Short.valueOf("1"));  
        System.out.println(Long.valueOf("1"));  
        System.out.println(Float.valueOf("1.0"));  
        System.out.println(Double.valueOf("1.0"));  
        System.out.println(Byte.valueOf("1"));  
        //Character類是構造將基本型別char轉成包裝型別Character  
        System.out.println(Character.valueOf('a'));  
          
        //第個包裝類都有一個parseXxx方法,將字串轉成對應的基本型別,除Character類  
        System.out.println(Boolean.parseBoolean("false"));  
        System.out.println(Integer.parseInt("1"));  
        System.out.println(Short.parseShort("1"));  
        System.out.println(Long.parseLong("1"));  
        System.out.println(Float.parseFloat("1.0"));  
        System.out.println(Double.parseDouble("1.0"));  
        System.out.println(Byte.parseByte("1"));  
          
        //Character包裝類的常用方法  
        Character.isLetter('a');//判斷這個字元是否為英文字母  
        Character.isDigit('1');//判斷這個字元是否為數字  
        Character.isUpperCase('A');//判斷這個字元是否為大寫  
        Character.isLowerCase('a');//判斷這個字元是否為小寫  
        Character.isWhitespace(' ');//判斷這個字元是否為空格或回車  
    }  
  
}  



相關文章