Java.lang.Integer類中toString(int i, int radix)的具體實現


Java.lang.Integer.toString(int i,int radix)方法可以實現將一個int類型的10進制的數據轉換為指定進制的數據。

api文檔中介紹:

返回第二個參數指定的基數中第一個參數的字符串表示形式。
如果基數小於Character.MIN_RADIX(2)或大於Character.MAX_RADIX(36),則改用基數10。
如果第一個參數為負,則結果的第一個元素為前加上一個負號“-”。如果第一個參數不為負,則結果中不會出現負號。
結果的其余字符代表第一個參數的大小。如果大小為零,則用單個零字符'0'表示;否則,表示幅度的第一個字符將不是零字符。
如果基數為N,則按所示順序將這些字符的前N個用作基數N個數字。因此,十六進制的數字(基數16)為0123456789abcdef。如果需要大寫字母,可以在結果上調用String.toUpperCase()方法: Integer.toString(n,16).toUpperCase()

 toString(int i,int radix)方法的源碼:

 

public static String toString(int i, int radix) {
         /* 最大進制36,最小進制2,見Character類*/
        if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
            radix = 10;

        /* Use the faster version */
        if (radix == 10) {
            return toString(i);
        }
       
        /*創建一個用於存放轉換為指定字符的字符型數組*/
        char buf[] = new char[33];
         /* 判斷傳入的數據是正是負*/
        boolean negative = (i < 0);
        /*傳入數據時字符數組中的位置 */
        int charPos = 32;

         /*不管正負,全部轉換為負數 */
        if (!negative) {
            i = -i;
        }

         /* 當傳入的數據或者除以進制之后得到的整數大於指定的進制時繼續循環 */
        while (i <= -radix) {
            buf[charPos--] = digits[-(i % radix)];
            i = i / radix;
        }
         /* 將最后一個余數添加到數組中 */
        buf[charPos] = digits[-i];

         /* 當傳入的數據是負數時,需要在前面添加一個負號 */
        if (negative) {
            buf[--charPos] = '-';
        }

        return new String(buf, charPos, (33 - charPos));
    }       

 

Integer類中的digits數組為:
final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };

Character類中的MIN_RADIXMAX_RADIX兩個field為:

 public static final int MIN_RADIX = 2;

 public static final int MAX_RADIX = 36;

 

 

 

 




免責聲明!

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



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