美文网首页
Integer源码观后感

Integer源码观后感

作者: 楚朝伟 | 来源:发表于2018-10-17 18:21 被阅读0次

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对象,判断内存地址 其实是相同的。

相关文章

网友评论

      本文标题:Integer源码观后感

      本文链接:https://www.haomeiwen.com/subject/ldbhzftx.html