1、首先Integer提供了两类工具类,包括把一个int类型转成二进等,

其实执行转换算法只有一个方法:

 1     public static String toString(int i, int radix) {
 2
 3         if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
 4             radix = 10;
 5
 6         /* Use the faster version */
 7         if (radix == 10) {
 8             return toString(i);
 9         }
10
11         char buf[] = new char[33];
12         boolean negative = (i < 0);
13         int charPos = 32;
14
15         if (!negative) {
16             i = -i;
17         }
18
19         while (i <= -radix) {
20             buf[charPos--] = digits[-(i % radix)];
21             i = i / radix;
22         }
23         buf[charPos] = digits[-i];
24
25         if (negative) {
26             buf[--charPos] = '-';
27         }
28
29         return new String(buf, charPos, (33 - charPos));
30     }

2、测试的示例代码

1 //定义一个Integer 变量
2 Integer i = 1;
3 Integer j = 1;
4 System.out.println(i==j); //true
5
6 Integer x = 128;
7 Integer y = 128;
8 System.out.println(x==y); //false

为什么会出现这样的结果呢,因为Integer内部维护了一个缓存类IntegerCache,默认缓存-128~127的数据

 1 /**
 2      * Cache to support the object identity semantics of autoboxing for values between
 3      * -128 and 127 (inclusive) as required by JLS.
 4      *
 5      * The cache is initialized on first usage.  The size of the cache
 6      * may be controlled by the -XX:AutoBoxCacheMax=<size> option.
 7      * During VM initialization, java.lang.Integer.IntegerCache.high property
 8      * may be set and saved in the private system properties in the
 9      * sun.misc.VM class.
10      */

IntegerCache缓存类的大小是可以设置,通过 -XX:AutoBoxCacheMax=<size> 这个选项来设置

 1     private static class IntegerCache {
 2         static final int low = -128;
 3         static final int high;
 4         static final Integer cache[];
 5
 6         static {
 7             // high value may be configured by property
 8             int h = 127;
 9             String integerCacheHighPropValue =
10                 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
11             if (integerCacheHighPropValue != null) {
12                 int i = parseInt(integerCacheHighPropValue);
13                 i = Math.max(i, 127);
14                 // Maximum array size is Integer.MAX_VALUE
15                 h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
16             }
17             high = h;
18
19             cache = new Integer[(high - low) + 1];
20             int j = low;
21             for(int k = 0; k < cache.length; k++)
22                 cache[k] = new Integer(j++);
23         }
24
25         private IntegerCache() {}
26     }

3、Integer类的内部维护了一个int基本类型的变量

提供了两个构造方法来初始化,一个构造方法接受int类型,一个接受String类型,接受类型的构造方法,调用了静态方法parseInt(s,10);

4、还有JDK1.7新添加的一个方法

 1     /**
 2      * Compares two {@code int} values numerically.
 3      * The value returned is identical to what would be returned by:
 4      * <pre>
 5      *    Integer.valueOf(x).compareTo(Integer.valueOf(y))
 6      * </pre>
 7      *
 8      * @param  x the first {@code int} to compare
 9      * @param  y the second {@code int} to compare
10      * @return the value {@code 0} if {@code x == y};
11      *         a value less than {@code 0} if {@code x < y}; and
12      *         a value greater than {@code 0} if {@code x > y}
13      * @since 1.7
14      */
15     public static int compare(int x, int y) {
16         return (x < y) ? -1 : ((x == y) ? 0 : 1);
17     }

其他方法就不做分析,可以直接参看API

转载于:https://www.cnblogs.com/lianliang/p/5753891.html

Integer类源码浅析相关推荐

  1. LinkedList类源码浅析(二)

    1.上一节介绍了LinkedList的几个基本的方法,其他方法类似,就不一一介绍: 现在再来看一个删除的方法:remove(Object o) remove方法接受一个Object参数,这里需要对参数 ...

  2. Android Loader机制全面详解及源码浅析

    原文出处:csdn@工匠若水,http://blog.csdn.net/yanbober/article/details/48861457 一.概述 在Android中任何耗时的操作都不能放在UI主线 ...

  3. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类

    1.概述 转载:Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一] 可以去看原文.这里是补充专栏.请看原文 2. 前言 主要针对yarn-per-job模式进行代码分析. ...

  4. 【flink】Flink 1.12.2 源码浅析 : Task数据输入

    1.概述 转载:Flink 1.12.2 源码浅析 : Task数据输入 在 Task 中,InputGate 是对输入的封装,InputGate 是和 JobGraph 中 JobEdge 一一对应 ...

  5. hive 强转为string_String 源码浅析————终结篇

    写在前面 说说这几天看源码的感受吧,其实 jdk 中的源码设计是最值得进阶学习的地方.我们在对 api 较为熟悉之后,完全可以去尝试阅读一些 jdk 源码,打开 jdk 源码后,如果你英文能力稍微过得 ...

  6. System源码浅析- initializeSystemClass(initProperties)

    文章目录 前情提要 System 描述 initializeSystemClass 描述 initProperties JVM_InitProperties 前情提要 在前面已经介绍过 System与 ...

  7. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  8. hashmap允许null键和值吗_hashMap底层源码浅析

    来源:https://blog.csdn.net/qq_35824590/article/details/111769203 hashmap是我们经常使用的一个工具类.那么知道它的一些原理和特性吗? ...

  9. 【flink】Flink 1.12.2 源码浅析 :Task数据输出

    1.概述 转载:Flink 1.12.2 源码浅析 :Task数据输出 Stream的计算模型采用的是PUSH模式, 上游主动向下游推送数据, 上下游之间采用生产者-消费者模式, 下游收到数据触发计算 ...

最新文章

  1. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
  2. 017_Upload上传
  3. 【Finish】Python Day 2
  4. 单点登录Redis存储Session及Cookie场景介绍
  5. cxGrid 在 GridMode = True 模式下实现标题点击排序以及标题列过滤筛选!!!
  6. java自动投票代码,Java 投票(自动添一)
  7. 第二百四十八天 how can I 坚持
  8. android学习——popupWindow 在指定位置上的显示
  9. 如何通过 WinUSB 功能访问 USB 设备
  10. protel 99se 简单的手动画pcb
  11. NSSM - 将任何exe应用封装成windows服务的神器
  12. selenium中模拟鼠标操作
  13. 蚊香液加热器雷达感应,人体存在感应雷达模块,智能控制加热器启动与关闭
  14. 信息系统项目管理师---第十五、十六章 知识管理及项目变更管理历年考题
  15. 面试笔记 如何3秒钟看出一个人的实力?| 奸商行走江湖7年的经验分享
  16. 从互联网汽车到国企改革:砸钱还是自己干?
  17. SUMPRODUCT
  18. 景德镇三中2021高考成绩查询,2021年景德镇高考状元是谁分数多少分,历年景德镇高考状元名单...
  19. 计算机社团动员大会发言稿,学生社团总结会讲话稿
  20. python鸭制作类代码_详解duck typing鸭子类型程序设计与Python的实现示例

热门文章

  1. mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推
  2. 【linux】【tar】tar命令详解之czvf,xzvf
  3. 在python中使用关键字define定义函数_python等价于'define func()'或如何在python中注释掉函数调用...
  4. python pointer_python 的隐式指针特征与class inheritance
  5. 简化路径Python解法
  6. Python中float(‘inf‘)代表什么意思?
  7. 查看linux文件系统结构,linux的文件系统架构
  8. 华东政法大学教学管理系统_中国科学技术大学1022万采购3包生命科学仪器
  9. jupyternotebook运行python_怎么运行jupyter notebook?
  10. 找不见matlab保存的txt,为什么自己保存的M文件在电脑里找不见,看不见而matlab里却能打开也能看到?...