装箱拆箱系列:java中的Integer装箱实例
Posted zhangjin1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装箱拆箱系列:java中的Integer装箱实例相关的知识,希望对你有一定的参考价值。
多数程序员或者在校学生,在平时开发中或者学习中,也就写个 int sum = 0;
或者int i=0; i++;
,没出什么bug,也不会关心这些多,这么细。讨论装箱,当然还是因为面试造火箭。
所以先看看具体的面试题,运行下面的代码,看执行结果,引出疑问,最终了解Integer的装箱。
public class IntegerPackageTest {
public static void main(String[] args) {
Integer value1 = -128; //自动装箱
Integer value2 = -128;
System.out.println(value1 == value2); //true
System.out.println(value1.equals(value2)); //true
System.out.println("-------------------");
Integer value3 = -129;
Integer value4 = -129;
System.out.println(value3 == value4); //false
System.out.println(value3.equals(value4)); //true
System.out.println("-------------------");
Integer value5 = 127;
Integer value6 = 127;
System.out.println(value5 == value6); //true
System.out.println(value5.equals(value6)); //true
System.out.println("-------------------");
Integer value7 = 128;
Integer value8 = 128;
System.out.println(value7==value8); //false
System.out.println(value7.equals(value8)); //true
}
}
什么是自动装箱? -128和-129输出结果为什么不一样?
JDK 1.5 (以后的版本)的新特性自动装箱和拆箱
-
装箱:把基本类型转换为包装类类型。例如:Integer是包装类,int是基本类型。
int a =10; Integer i = new Integer(a);
-
自动装箱是:
Integer value = 10;
这里提出疑问,为什么int就能直接转化为Integer ,Integer 类不应该是new出来一个对象吗?
答案是这个过程会自动 new Integer(10) 对象。 -
自动装箱,范围在 -128 ~ 127 【256个数字 】的地址是一样的,-128 到 127 之间的有个自动装箱的缓存池。可以查看JDK源码Integer类中,有个私有static内部类如下:
private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { ... } private IntegerCache() {} }
如果不在这个范围,就会使用new 新创建对象。所以用
==
判断,就会是false
。
以上是关于装箱拆箱系列:java中的Integer装箱实例的主要内容,如果未能解决你的问题,请参考以下文章