Java学习之Integer封装与拆箱
2017-02-28 17:39
155 查看
我们都站在巨人的肩膀上
Integer自动封装的陷进
示例:
以上两个比较为什么一个true,一个false?相信很多人在实际项目中,或者学习中有遇到过,这个问题我们看Integer的源码就会一目了然:
注意:此时会进行自动装箱操作,简单点说,也就是把基本数据类型转换成Integer对象,而转换成Integer对象正是调用的valueOf方法,可以看到,Integer中把-128至127 缓存了下来。官方解释是小的数字使用的频率比较高,所以为了优化性能,把这之间的数缓存了下来。这就是为什么这道题的答案回事false和ture了。当声明的Integer对象的值在-128-127之间的时候,引用的是同一个对象,所以结果是true。
Integer自动拆箱机制
注意:这里的Integer是我们自己new出来的,并不是用的缓存,所以结果是false。 当int和Integer进行==比较的时候,Java会把Integer进行自动拆箱,也就是把Integer转成int类型,所以这里进行比较的是int类型的值,所以结果即为true。
Integer自动封装的陷进
示例:
public static void main(String[] args) { Integer a=1000,b=1000; Integer c=100,d=100; System.out.println(a==b);//false System.out.println(c==d);//true }
以上两个比较为什么一个true,一个false?相信很多人在实际项目中,或者学习中有遇到过,这个问题我们看Integer的源码就会一目了然:
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; //IntegerCache.low = -128, IntegerCache.high = 127 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
注意:此时会进行自动装箱操作,简单点说,也就是把基本数据类型转换成Integer对象,而转换成Integer对象正是调用的valueOf方法,可以看到,Integer中把-128至127 缓存了下来。官方解释是小的数字使用的频率比较高,所以为了优化性能,把这之间的数缓存了下来。这就是为什么这道题的答案回事false和ture了。当声明的Integer对象的值在-128-127之间的时候,引用的是同一个对象,所以结果是true。
Integer自动拆箱机制
public static void main(String[] args) { Integer a = new Integer(1000); int b = 1000; Integer c = new Integer(10); Integer d = new Integer(10); System.out.println(a == b);//true System.out.println(c == d);//false }
注意:这里的Integer是我们自己new出来的,并不是用的缓存,所以结果是false。 当int和Integer进行==比较的时候,Java会把Integer进行自动拆箱,也就是把Integer转成int类型,所以这里进行比较的是int类型的值,所以结果即为true。
相关文章推荐
- java学习(4) int Integer 基本类型与封装类型的理解
- 由Integer封装与拆箱引申出的java面试题
- 【JAVA学习】java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- 重踏学习Java路上_Day13(StringBuffer,Array与数组,Integer,Character,装箱,拆箱)
- jasperreport学习之javabean封装成list作为数据源
- java基本数据类型与封装类型详解(int和Integer区别)
- 学习java第三天---------------封装、继承和多态
- Java中Integer与int类型的装箱和拆箱
- (JAVA SE 学习笔记)Java.SE.第010讲.面向对象之封装.续
- Java的String.valueOf 转换 与、空串+类型变量转换与封装类(Integer)的toString方式转换比较。
- java自动装箱、拆箱——Integer细节
- (JAVA SE 学习笔记)Java.SE.第009讲.面向对象之封装
- Java菜鸟学习笔记--面向对象篇(二):封装与访问修饰符
- Java学习笔记——类与对象(封装、继承与多态)
- java AtomicInteger 类学习
- 大三学长带我学习JAVA.作业5.面向对象之封装 面向对象之封装.续 学长带我学java的作业5
- Java-API学习笔记---Integer
- [Java]JDK源码学习(2)Integer
- 黑马程序员_JAVA学习日记_JAVA中API中数据类型包装类(Integer),System,Runtime,Date
- [bxd学习java基本点]8.linkedList的一个封装,可为堆栈及队列。++++一句话来看continue与break++++ArrayList除重复的标准写法+++++++++