JDK源码解读(第四弹:Integer之Integer的基本属性)

Integer类继承了Number类,主要作用是对基本类型int进行了包装,提供了一些处理int的方法。
像parseInt,valueOf,intValue这些方法平时用的非常多,每个人都感觉对Integer很熟,看似这个类的源码好像没什么可看的。不过不看不知道,一看吓一跳,接下来我们来慢慢分析。

看源码之前,可以先看一下Integer的 API文档,原文链接如下:
https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html
也可以看我的翻译版,链接如下:
https://blog.csdn.net/lianjiww/article/details/82531336

Integer类源码很长,即便把注释全部去掉也有几大百行,这里就先不把源码全部贴上来,我们一部分一部分的看。而且由于Integer类要研究的内容其实很多,所以会分好几篇文章来讲,本篇先看Integer的几个基本属性。

先看一下Integer类的几个的属性:

@Native public static final int   MIN_VALUE = 0x80000000;

@Native public static final int   MAX_VALUE = 0x7fffffff;

@SuppressWarnings("unchecked")
    public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

private final int value;

@Native public static final int SIZE = 32;

public static final int BYTES = SIZE / Byte.SIZE;

MIN_VALUE:这个静态变量表示int能取的最小值,为0x80000000,也就是-2的31次方。
MAX_VALUE:这个静态变量表示int能取的最大值,为0x7fffffff,也就是2的31次方减1。
TYPE:就是基本类型int的类型,把TYPE打印出来的话就是输出int。
value:既然Integer是对int的包装,那肯定会有一个int的属性用来保存Integer表示的int值,就是这个value了。
SIZE:使用二进制补码表示一个int值的bit数。
BYTES:使用二进制补码表示一个int值的byte数。

接下来看到有几个static的char数组:

    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',
        } ;

    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
                                      99999999, 999999999, Integer.MAX_VALUE };

这几个数组看起来古怪,其实有妙用。

digits数组包含了用于表示数字的所有可能的字符。int支持从2进制到36进制的表示方式,所以光0-9还不够,得再有a-z总共36个字符才能表示所有不同进制的数字。
DigitTens数组用于获取0到99之间某个数的十位数,比如想要获取28的十位数,那就通过这个数组DigitTens[28],也就是得到2。
DigitOnes数组用于获取0到99之间某个数的个位数,比如想要获取28的个位数,那就通过这个数组DigitOnes[28],也就是得到8。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值