博客
关于我
Java Integer类源码分析
阅读量:530 次
发布时间:2019-03-08

本文共 1119 字,大约阅读时间需要 3 分钟。

最近我在研究Integer类,记录一下我的发现。Integer是Java中int类型的包装类,它的值由内部属性value存储,最大值是0x7fffffff,最小值是0x80000000。Integer还维护了一个内部缓存IntegerCache,用于缓存-128到127之间的整数值。当调用Integer.valueOf(int i)时,优先从缓存中获取值。

举个例子,创建几个Integer对象:

Integer a = new Integer(1);
Integer b = new Integer(1);
Integer c = 1; // 使用自动拆箱
Integer d = 1;
Integer e = 128;
Integer f = 128;

运行这段代码,结果分别是:

a == b → false
c == d → true
e == f → false

这说明在-128到127范围内的整数值会被缓存,而128及以上则不会。

接下来,我看了Integer的常用方法。hashCode()方法返回的是Integer本身的值,这很有用。另外,Integer还有一个静态方法hashCode(int value),同样返回value。

然后,我深入研究了parseInt(String s, int radix)方法。这个方法可以将字符串转换为不同进制的整数,radix的范围是2到36。代码中首先检查s是否为null,接着检查radix的范围。然后初始化result为0,处理负数情况,逐步计算每一位数字,确保结果不会超过Integer.MAX_VALUE。

parseInt的实现有几个关键点:

  • 处理正负号,确定数值范围。
  • 从最高位开始逐位转换,使用乘法和减法来计算最终结果。
  • 处理进位和溢出情况,确保转换过程中的准确性。
  • 再来看Integer.toString(int i)方法,这是parseInt的逆向操作。对于i=2147483647,返回"2147483647",而i=Integer.MIN_VALUE则直接返回"-2147483648"。stringSize(int x)方法用于计算整数的字符长度,使用了一个预定义的sizeTable数组来优化长度计算。

    最后,getChars(int i, int index, char[] buf)方法用于将整数转换为字符数组。对于大数,使用位移和减法来分解数字,提高转换效率。对于小数,则使用除法和取模的方式。

    总的来说,Integer类在处理int类型的包装、缓存优化、字符串转换以及不同进制转换方面都有详细的实现。这些功能对于日常编程和数值处理都非常有用。

    转载地址:http://vsgnz.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置负载均衡到后台网关集群
    查看>>
    Nginx配置限流,技能拉满!
    查看>>
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>
    Nginx:NginxConfig可视化配置工具安装
    查看>>
    ngModelController
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
    查看>>
    NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
    查看>>