1. 程式人生 > >java Integer的一些方法原始碼

java Integer的一些方法原始碼

Integer

toString()

public static String toString(int i){
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true
); } final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE }; static int stringSize(int x) { for (int i=0; ; i++) if (x <= sizeTable[i]) return i+1
; } static void getChars(int i, int index, char[] buf) { int q, r; int charPos = index; char sign = 0; if (i < 0) { sign = '-'; i = -i; } // Generate two digits per iteration while (i >= 65536) { q = i / 100
; // really: r = i - (q * 100); r = i - ((q << 6) + (q << 5) + (q << 2)); i = q; buf [--charPos] = DigitOnes[r]; buf [--charPos] = DigitTens[r]; } // Fall thru to fast mode for smaller numbers // assert(i <= 65536, i); for (;;) { q = (i * 52429) >>> (16+3); r = i - ((q << 3) + (q << 1)); // r = i-(q*10) ... buf [--charPos] = digits [r]; i = q; if (i == 0) break; } if (sign != 0) { buf [--charPos] = sign; } } public static String toString(int i, int radix) { if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) radix = 10; /* Use the faster version */ if (radix == 10) { return toString(i); } //32位2進位制 符號位'+'或'-' 故33位 char buf[] = new char[33]; boolean negative = (i < 0); int charPos = 32; //i為正數 取相反數 if (!negative) { i = -i; } //將i轉成對應進位制的數 迴圈條件當i可以用1位該進位制數表示時 // 不可 i<=0(死迴圈 在迴圈的最後i將一直為0) // 若為 i<0 缺少 i=0的情況並且buf[charPos--]預設還有一位,造成String第一位為空,應在迴圈結尾++charPos while (i <= -radix) { //final static char[] digits 儲存0-9 和a-z的字元陣列 // 36個字元 故 radix最大值為36常用的將26個字母作為延遲10進位制以上的進位制 buf[charPos--] = digits[-(i % radix)];//注意:目前i是負數 i&radix 也是負數 i = i / radix; } buf[charPos] = digits[-i]; if (negative) { buf[--charPos] = '-'; } return new String(buf, charPos, (33 - charPos)); }