包裝類簡述(小白理解,小白編寫,歡迎大神指點,小白跪謝)

@

一、前言(可忽略)

作者是一位自學JAVA的小白,通過網上影片學習和自己對包裝類的理解,現將自己對包裝類的認知描述如下:(希望能與各位同行好友共同分享自己所學的java知識,同時,也熱切期望各位同行前輩能夠幫助作者指出不足,讓小白的編程技術能更上一層樓,感謝各位同行大佬。

二、包裝類的認知

學過Java的帥鍋都知道8種基本數據類型對應8種包裝類型(長的也差不多,基本上都是首字母大寫,除了int和char,英文有點長),8種包裝類也屬於引用數據類型,還有String也是(具體可看小白的String簡介)。

為什麼要提供8種包裝類?

簡單來說就是因為8種基本類型不夠用(小白理解),JAVA是完全面向對象開發,在開發過程中,我們不可避免的使用到對象和多態,面向對象開發,也造成了我們對需要使用對應引用變數的基本數據類型常量的煩惱。

     基本數據類型                     包裝類型

     byte                             java.lang.Byte(父類Number)
     short                            java.lang.Short(父類Number)
     int                             java.lang.Integer(父類Number)
     long                           java.lang.Long(父類Number)
     float                             java.lang.Float(父類Number)
     double                       java.lang.Double(父類Number)
     boolean                      java.lang.Boolean(父類Object)
     char                         java.lang.Character(父類Object)

三、包裝類的愛與恨

裝箱:基本數據類型轉換成引用數據類型
    手動裝箱:

Integer i=new Integer(100);//照葫蘆畫瓢,i保存的是在堆記憶體中的Integer對象的記憶體地址,Integer對象指向整數常量地址池中的"100",

    自動裝箱:

Integer i=100;//照葫蘆畫瓢

拆箱:引用數據類型轉換成基本數據類型

    手動拆箱:

int j=i.intValue();//照葫蘆畫瓢

    手動拆箱的方法:

       * byte byteValue() 以byte形式返回指定的數值
       * abstract double doubleValue 以double形式返回指定的數值
       * abstract float floatValue()以float形式返回指定的數值
       * abstract int  intValue()以int形式返回指定的數值
       * abstract long longValue()以long形式返回指定的數值
       * short shortValue以short形式返回指定的數值

    自動拆箱:

int j=i;//照葫蘆畫瓢

重點:

long Y=1000;
Long A=1000L;
System.out.println(Y==A);//引用數據類型與基本數據類型比較,自動拆箱,結果為true
Integer I=1000;
Float F=1000.0;
System.out.println(I==F);//提示出錯,數值雖相同,但不同包裝類型不可直接比較)
Integer X=100;
Integer C=100
System.out.println(X==C);//true,兩對象的記憶體地址相同

```c
Integer M=100;
System.out.println(M+1);//true,包裝類型的變數在進行四則運算時會自動拆箱

注意:為了提高程式的執行效率,Java將所有-128~127之間所有的包裝對象都提前創建到了方法區的「整數型常量池中」,所以當使用”==”比較時,由於是使用”=”直接賦記憶體地址(整數型常量池中的),所以兩變數記憶體地址相同,結果為true

Integer H=100; 
java.lang.Integer D=new java.lang.Integer(100);
System.out.println(H==D);//false D和H存放的記憶體地址不一樣
        java.lang.Integer x=1000;
        java.lang.Integer b=0;
        java.lang.Integer c=1000;
        java.lang.Long N=1000L;
        System.out.println(x.equals(c+b));//true, 先進行b和C的自動拆箱,求出b+c並自動裝箱,再調用euqals方法進行對象引用的值比較。
        System.out.println(N.equals(c+b));//false
     
 java.lang.Integer K=1000;
 java.lang.Integer Q=0;
 java.lang.Long A=1000L;
 System.out.println(A==(K+Q));首先A進行自動拆箱,K+Q由於進行四則運算自動拆箱,比較對象的值,由於JAVA在對類型轉換時會自動向上轉,int->long

注意:equals在比較不同包裝類型時,由於類型不同會返回false

通過訪問包裝類的常量,來獲取最大值和最小值(獲取類型取值範圍)

//比如int的取值範圍
 java.lang.Integer x=1000;
 System.out.println(x.MIN_VALUE);//-2147483648
 System.out.println(x.MAX_VALUE);//2147483647

四、包裝類的異常

        Long l=new Long("Chinese");
        long I=l;
        System.out.println(I);//異常報錯:NumberFarmatException
        //編譯沒錯,但運行的時候會出現異常,只能是數字包裝。
        Long X=new Long("123");
        long Y=X;
        System.out.println(Y);//123

五、包裝類的方法

static int parseInt(String s)

作用:靜態方法,傳參String,返回int,類名調用

           int RetValue=java.lang.Integer.parseInt("123");//String->int,照葫蘆畫瓢
           System.out.println(RetValue);//123

static String toBinaryString(int)

作用:靜態,將int以十進位轉化成二進位

        System.out.println(java.lang.Integer.toBinaryString(10));//1010      

static String toHexString(int x)

作用:靜態,將int以十進位轉化成十六進位

        System.out.println(java.lang.Integer.toHexString(17));//11

static String toOctalString(int)

作用:靜態,將int以十進位轉換成八進位

        System.out.println(java.lang.Integer.toOctalString(10));//12

static Integer valueOf(int i)

作用:靜態,類型互轉,將i以int轉換成Integer

        System.out.println(java.lang.Integer.valueOf(100));//100

static Integer valueOf(String x)

作用:靜態,類型互轉,將x以String轉換成Integer

        System.out.println(java.lang.Integer.valueOf("1000"));//1000,String只能以數字形式輸入,否則報NumberFormatException錯誤

Tags: