2010-04-29 57 views
4

在注视在该方法的代码的一个问题:在java.lang.Integer中的内部代码

Integer.toHexString

我发现以下代码:

public static String toHexString(int i) { 
    return toUnsignedString(i, 4); 
} 

private static String toUnsignedString(int i, int shift) { 
    char[] buf = new char[32]; 
    int charPos = 32; 
    int radix = 1 << shift; 
    int mask = radix - 1; 
    do { 
     buf[--charPos] = digits[i & mask]; 
     i >>>= shift; 
    } while (i != 0); 

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

的问题是,在toUnsignedString ,为什么我们创建了32个字符的字符?

回答

9

32个字符是您需要多少代表一个int二进制(base-2,shift为1,由toBinaryString使用)。

它的尺寸可以精确,但我想它从来没有商业意义,尝试优化。

+0

aha,谢谢,我忘了它。 – 2010-04-29 16:03:58

2

因为该方法也被toBinaryString()调用,并且int最多为32位二进制数字。

+0

啊哈,谢谢,我忘记了。 – 2010-04-29 16:04:27

1

因为Java中int的最大值是:2^31 - 1

+0

啊哈,谢谢,我忘记了。这似乎是非常倾倒的问题。 感谢所有guyz。 – 2010-04-29 16:04:51