Integer的自动装箱过程
2015-07-22 14:05
633 查看
先来看道题
int a=100;
int b=100;
Integer c=a;
Integer d=b;
System.out.println(a==b);
System.out.println(c==d);
其实这道题 和 a 与 b 没有什么关系,可以直接看成
Integer c=100;
Integer d=100;
System.out.println(c==d);
执行结果为 true
当是如果把题目改为
Integer c=200;
Integer d=200;
System.out.println(c==d);
执行结果却为false
这是为什么呢?
这就涉及到 Integer 的自动装箱了,
我们都知道Integer是一个 类 不是基本类型数据,但是为什么它可以直接像基本类型数据一样可以直接赋值.
这是在jdk1.5 之后引入的 自动装箱和自动拆箱.
上面的问题实际上是使用了 Integer.valueOf()进行自动装箱的.
等同于
Integer c=Integer.valueOf(100);
对于为什么上面两个问题的执行结果会有不同,我们就需要看 Integer.valueOf()的源码了
IntegerCache.high和IntegerCache.low默认分别为 127 和-128
如果传入的值是在-128~127之间就会建立Integer实例并且把实例放入缓存中,
当再传入的值是缓存中存在的,就会把缓存中的实例返回.
如果不在 -128~127之间就不会把 实例放入缓存中.直接返回一个实例.
内容部分参考java jdk7 学习笔记
int a=100;
int b=100;
Integer c=a;
Integer d=b;
System.out.println(a==b);
System.out.println(c==d);
其实这道题 和 a 与 b 没有什么关系,可以直接看成
Integer c=100;
Integer d=100;
System.out.println(c==d);
执行结果为 true
当是如果把题目改为
Integer c=200;
Integer d=200;
System.out.println(c==d);
执行结果却为false
这是为什么呢?
这就涉及到 Integer 的自动装箱了,
我们都知道Integer是一个 类 不是基本类型数据,但是为什么它可以直接像基本类型数据一样可以直接赋值.
这是在jdk1.5 之后引入的 自动装箱和自动拆箱.
上面的问题实际上是使用了 Integer.valueOf()进行自动装箱的.
等同于
Integer c=Integer.valueOf(100);
对于为什么上面两个问题的执行结果会有不同,我们就需要看 Integer.valueOf()的源码了
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
IntegerCache.high和IntegerCache.low默认分别为 127 和-128
如果传入的值是在-128~127之间就会建立Integer实例并且把实例放入缓存中,
当再传入的值是缓存中存在的,就会把缓存中的实例返回.
如果不在 -128~127之间就不会把 实例放入缓存中.直接返回一个实例.
内容部分参考java jdk7 学习笔记
相关文章推荐
- Poco for Windows 编译 x86 x64
- ios json解析 碰到有转义字符的解决方法
- spring mvc 4.1.5+mybatis 3.2.6+ maven
- 利用Loader来动态加载不同的QML文件来改变UI
- android.os.handler
- ARM寄存器介绍
- win8 远程桌面时提示凭证不工作问题的终极解决办法
- Codeforces 445B——并查集或DFS——DZY Loves Chemistry
- achartengine之折线图---简单用法
- 单例
- Java 的Excel 导出功能的实现
- 编译原理学习基本概念汇总
- codevs1052
- hihoCoder - 1051 - 补提交卡(贪心、枚举)
- 快速找出两个字符串中所有相同的字符
- iOS开发之沙盒机制(SandBox) 第一篇
- nginx+php-fpm+mysql分离部署详解
- jquery点击空白处事件
- TCP/IP详解学习笔记(2)-数据链路层
- 单链表的插入删除反转和冒泡排序单链表