Java 包裝類及其與String轉換、進制轉換


一、包裝類

1.基本類型和引用類型

 Java中的基本類型我們都知道有8種,但是作為基本類型限制功能的發揮,例如整形轉String類型等可能需要類方法實現會更加簡便。那么八個基本類型對應八個包裝類,即引用類型。具體對應如下:

char--Character int--Integer boolean--Boolean double--Double float--Float byte--Byte short--Short long--Long

 

2.值傳遞和引用傳遞

這應該是規范的叫法,我姑且這么叫着,所謂按值傳遞,就是形參改變不影響原有數值,而引用傳遞形參實參共用同一個內存空間,一個改變,另一個也會跟着相應的改變。那么哪些是按值傳遞,哪些又是引用傳遞呢?

已知的情況基本類型均是按值傳遞,而類實例對象均是按照引用傳遞。

特殊的情況有:

數組是按照引用傳遞的,但是s[0]=9這種可以改變,s=b新數組無法改變原數組的值;

String類型反正形參改變不會改變實參。

 

3.包裝類的構造函數

包裝類的構造函數一般都有兩個,一個參數是自己對應的基本類型,例如:

Integer i=new Integer(3);
or
int j=3;
Integer i=new Integer(j); 

另一個就是以對應的String類型作為參數(Character不行):

Float f=new Float("1.23");

如果不是對應的類型,則會拋出NumberFormatException異常。

 

4.包裝類和String類之間的相互轉換

(1) String類型轉換為相應的包裝類

 接下來以Integer和int為例,其余七個包裝類均相同:

        /*String to Integer - 1*/
        String s="23";
        Integer i=new Integer(s);
        System.out.println(i);

        /*String to Integer - 2*/
        Integer k=Integer.valueOf(s);
        System.out.println(k);

        /*String to int - 1*/
        int j=Integer.parseInt(s);
        System.out.println(j);
        /*String to int - 2*/
      int l=Integer.valueOf(s).intValue(); //甚至可以不需要intValue()方法都可以
      System.out.println(l);

(2) 包裝類轉換為String

 以Double和double為例:

        double a=10.36;
        Double b=12.48;
        /* to String - 1*/
        String s1=a+"";
        String s2=b+"";
        System.out.println(s1+s2);

        /*to String - 2*/
        String s3=b.toString();
        String s4=Double.toString(a);
        String s5=Double.toString(b);
        System.out.println(s3+s4+s5);

        /* to String - 3*/
        String s6=String.valueOf(a);
        String s7=String.valueOf(a);
        System.out.println(s6+s7);

(3)十進制轉為二、八、十六進制

除了自己用除法計算外,Java提供了很多方便的方法,例如以下兩類:

        int d=59;   //or Integer
        String b=Integer.toBinaryString(d);
        String o=Integer.toOctalString(d);
        String h=Integer.toHexString(d);
        System.out.println(b+" "+o+" "+h);

        /* Decimal to Binary Hex or Oct - 2*/
        String b1=Integer.toString(d,2);
        String o1=Integer.toString(d,8);
        String h1=Integer.toString(d,16);
        System.out.println(b1+" "+o1+" "+h1);

結果如下:

111011 73 3b
111011 73 3b

均是將數值轉換為String的其他進制。我們可以使用前面提過的方法在轉換為int或者包裝類。注:這里只討論API方法。

(4)其他進制轉十進制

        /* Binary Hex or Oct to Decimal - 1*/
        int a1=0b1001010;
        int a2=01576;
        int a3= 0xFA902;
        System.out.println(a1+" "+a2+" "+a3);

        /* Binary Hex or Oct to Decimal - 2 - From String*/
        String st1="1001010";
        String st2="1576";
        String st3="FA902";

        int b2=Integer.parseInt(st1,2);
        int o2=Integer.parseInt(st2,8);
        int h2=Integer.parseInt(st3,16);
        System.out.println(b2+" "+o2+" "+h2);
        
        /* Binary Hex or Oct to Decimal - 3 - From String*/
        int b3=Integer.valueOf(st1,2);
        int o3=Integer.valueOf(st2,8);
        int h3=Integer.valueOf(st3,16);
        System.out.println(b3+" "+o3+" "+h3);

后面兩種必須從String開始轉換,實際操作中具有較大局限性,因為獲得一個字符串型的二進制或其他進制可能是受限的,或者說有條件的,無法直接從int型進行轉換,直接轉換就會自動變成十進制,如第一種方法所示。

最后貼一下結果:

74 894 1026306
74 894 1026306
74 894 1026306

 


免責聲明!

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



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