Integer
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'
};
final static char [] DigitTens = {
'0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
'1', '1', '1', '1', '1', '1', '1', '1', '1', '1',
'2', '2', '2', '2', '2', '2', '2', '2', '2', '2',
'3', '3', '3', '3', '3', '3', '3', '3', '3', '3',
'4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
'5', '5', '5', '5', '5', '5', '5', '5', '5', '5',
'6', '6', '6', '6', '6', '6', '6', '6', '6', '6',
'7', '7', '7', '7', '7', '7', '7', '7', '7', '7',
'8', '8', '8', '8', '8', '8', '8', '8', '8', '8',
'9', '9', '9', '9', '9', '9', '9', '9', '9', '9',
} ;
final static char [] DigitOnes = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
} ;
- 由于int支持36进制,这个通过
Character
的MAX_RADIX
域看出因此需要36个字符才能表示所有的可能字符。digits就是表示所有可能的字符。 DigitTens
和DigitOnes
这两个域看起来有点奇怪,他们的主要作用是确定0-99之间的数值确认个位和十位的一个数组,比如要知道56的个位和十位,只需DigitTens[56]
、DigitOnes[56]
就可以分别求出了,但是我要求999这个数值的个位和十位怎么办,这样就会导致数组溢出,jdk源码的作者早就知道了,因此把这个方法的访问权限定位default
,在外部不能调用,因此只能在内部或者包内调用。注意到这两个域是char[]类型的,其主要作用是用来int到String的转换。这在toString
方法中很明显。
toString方法
public static String toString(int i, int radix);
public static String toString(int i)
toString(int i)
方法将传入的int值转换成对应的10进制字符串toString(int i, int radix)
这个方法将i转换成radix进制的字符串,radix的取值范围必须是在2–36之间,否则就转换成10进制的,既然这个方法可以可以转换成10进制,为什么还要上面的方法,这是因为带一个参数的toString方法对10进制转换进行了优化,一次迭代可以求出两位数。
stringSize方法
static int stringSize(int x) {
for (int i=0; ; i++)
if (x <= sizeTable[i])
return i+1;
}
这个方法是用来求x(x>0)的十进制数值的长度,这种方法使用比较的方法,避免了除法和求余操作,优化了速度。
IntegerCache静态内部类
private static class IntegerCache{...}
这个类的目的在于对-127—128这之间的int值进行缓存,也就是这个类在加载的时候就包含了-127—128的Integer对象,注意这只是对自动装箱的缓存,对于new出来的对象是不进行缓存的。例如:
public class TestDemo1 implements Cloneable {
public static void main(String[] args) throws Exception {
Integer a = 1;
Integer b = 1;
System.out.println(a == b);
Integer integer = new Integer(2);
Integer integer2 = new Integer(2);
System.out.println(integer == integer2);
}
}
输出结果:
true
false
toXXXString
public static String toBinaryString(int i) {
return toUnsignedString0(i, 1);
}
public static String toOctalString(int i) {
return toUnsignedString0(i, 3);
}
public static String toHexString(int i) {
return toUnsignedString0(i, 4);
}
- 顾名思义,上面的方法都是进制的转换,将数值转换成对应的字符串,注意这里转换的都是正数,如果是负数,转换成对应的unsigned值,不像toString方法,可以转换负数。
parseInt方法
public static int parseInt(String s, int radix)
throws NumberFormatException{...}
public static int parseInt(String s) throws NumberFormatException{...}
这两个方法与toString方法族、toXXXString方法等是相反的作用,将String类型对象根据不同进制转换成10进制的数值类型。这个方法会抛出异常,因为有可能String对象的内容与进制不对应。
hashCode方法
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
- Integer类的hashCode方法返回的仅仅就是Integer对象代表的int值。
equals方法
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
Integer类的equals方法重写了,比较的不再像Object类中的引用相等,而是值的相等。
compareTo方法
public int compareTo(Integer anotherInteger) {
return compare(this.value, anotherInteger.value);
}
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
这个方法是实现了Comparable接口中的compareTo方法,实现了Comparable接口说明这个类的对象可以比较大小,具体对象的大小就取决于compareTo方法的返回值,返回0表示相等,正数表示大于,负数表示小于。