美文网首页
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