1 背景
jdk1.8 java/long/Integer
2 Integer类
Integer 继承Number 实现Comparable接口
点进去看一下Number类 是个抽象类,里面有返回基本类型的方法。
2.1 私有属性
继续看Integer
私有属性 :
最大值
最小值
类型是Integer
char的数组 里面是0-9和26个小写字母。
2.2 方法
2.2.1 toString(int i, int radix)
我们先看到两个参数的toString方法,第一个参数 i表示要转化为字符串的整数,第二个参数 radix 表示几进制。
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) { //如果是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));
}
从上面代码 可以看到 如果10进制,则直接返回字符串,如果非10进制,经过计算,返回一个字符串。
2.2.2 String toString(int i)
然后是一个参数的toString
i表示要转化为字符串的整数
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);
}
先获取到i的长度size,然后创建一个长度为size的char类型数组。通过getChars方法,将i存入数组中,最后返回一个字符串。
2.2.3 valueOf
public static Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s,10));
}
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
当入参是string类型时,调用parseInt。当为int类型时 先判断是否在-127-128之间。Integer类会自动缓存这个区间的值。比如创建两个 值是1的Integer对象,判断内存地址 其实是相同的。
网友评论