一、前言(可忽略)作者是一位自學(xué)JAVA的小白,通過網(wǎng)上視頻學(xué)習(xí)和自己對包裝類的理解,現(xiàn)將自己對包裝類的認(rèn)知描述如下:(希望能與各位同行好友共同分享自己所學(xué)的java知識,同時,也熱切期望各位同行前輩能夠幫助作者指出不足,讓小白的編程技術(shù)能更上一層樓,感謝各位同行大佬。 二、包裝類的認(rèn)知學(xué)過Java的帥鍋都知道8種基本數(shù)據(jù)類型對應(yīng)8種包裝類型(長的也差不多,基本上都是首字母大寫,除了int和char,英文有點長),8種包裝類也屬于引用數(shù)據(jù)類型,還有String也是(具體可看小白的String簡介)。 為什么要提供8種包裝類? 簡單來說就是因為8種基本類型不夠用(小白理解),JAVA是完全面向?qū)ο箝_發(fā),在開發(fā)過程中,我們不可避免的使用到對象和多態(tài),面向?qū)ο箝_發(fā),也造成了我們對需要使用對應(yīng)引用變量的基本數(shù)據(jù)類型常量的煩惱。 ? ?? 基本數(shù)據(jù)類型 ? ?? ? ?? ? ?? ? ?? 包裝類型 ? ?? byte ? ?? ? ?? ? ?? ? ??? ?? ? ? java.lang.Byte(父類Number) 三、包裝類的愛與恨裝箱:基本數(shù)據(jù)類型轉(zhuǎn)換成引用數(shù)據(jù)類型 Integer i=new Integer(100);//照葫蘆畫瓢,i保存的是在堆內(nèi)存中的Integer對象的內(nèi)存地址,Integer對象指向整數(shù)常量地址池中的"100", ????自動裝箱: Integer i=100;//照葫蘆畫瓢 拆箱:引用數(shù)據(jù)類型轉(zhuǎn)換成基本數(shù)據(jù)類型 ????手動拆箱: int j=i.intValue();//照葫蘆畫瓢 ????手動拆箱的方法: * byte byteValue() 以byte形式返回指定的數(shù)值 * abstract double doubleValue 以double形式返回指定的數(shù)值 * abstract float floatValue()以float形式返回指定的數(shù)值 * abstract int intValue()以int形式返回指定的數(shù)值 * abstract long longValue()以long形式返回指定的數(shù)值 * short shortValue以short形式返回指定的數(shù)值 ????自動拆箱: int j=i;//照葫蘆畫瓢 重點: long Y=1000; Long A=1000L; System.out.println(Y==A);//引用數(shù)據(jù)類型與基本數(shù)據(jù)類型比較,自動拆箱,結(jié)果為true Integer I=1000; Float F=1000.0; System.out.println(I==F);//提示出錯,數(shù)值雖相同,但不同包裝類型不可直接比較) Integer X=100; Integer C=100 System.out.println(X==C);//true,兩對象的內(nèi)存地址相同 ```c Integer M=100; System.out.println(M+1);//true,包裝類型的變量在進行四則運算時會自動拆箱 注意:為了提高程序的執(zhí)行效率,Java將所有-128~127之間所有的包裝對象都提前創(chuàng)建到了方法區(qū)的“整數(shù)型常量池中”,所以當(dāng)使用"=="比較時,由于是使用"="直接賦內(nèi)存地址(整數(shù)型常量池中的),所以兩變量內(nèi)存地址相同,結(jié)果為true Integer H=100; java.lang.Integer D=new java.lang.Integer(100); System.out.println(H==D);//false D和H存放的內(nèi)存地址不一樣 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并自動裝箱,再調(diào)用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在對類型轉(zhuǎn)換時會自動向上轉(zhuǎn),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 //編譯沒錯,但運行的時候會出現(xiàn)異常,只能是數(shù)字包裝。 Long X=new Long("123"); long Y=X; System.out.println(Y);//123 五、包裝類的方法static int parseInt(String s) 作用:靜態(tài)方法,傳參String,返回int,類名調(diào)用 int RetValue=java.lang.Integer.parseInt("123");//String->int,照葫蘆畫瓢 System.out.println(RetValue);//123 static String toBinaryString(int) 作用:靜態(tài),將int以十進制轉(zhuǎn)化成二進制 System.out.println(java.lang.Integer.toBinaryString(10));//1010 static String toHexString(int x) 作用:靜態(tài),將int以十進制轉(zhuǎn)化成十六進制 System.out.println(java.lang.Integer.toHexString(17));//11 static String toOctalString(int) 作用:靜態(tài),將int以十進制轉(zhuǎn)換成八進制 System.out.println(java.lang.Integer.toOctalString(10));//12 static Integer valueOf(int i) 作用:靜態(tài),類型互轉(zhuǎn),將i以int轉(zhuǎn)換成Integer System.out.println(java.lang.Integer.valueOf(100));//100 static Integer valueOf(String x) 作用:靜態(tài),類型互轉(zhuǎn),將x以String轉(zhuǎn)換成Integer System.out.println(java.lang.Integer.valueOf("1000"));//1000,String只能以數(shù)字形式輸入,否則報NumberFormatException錯誤 |
|
來自: 新進小設(shè)計 > 《待分類》