自动装箱、自动拆箱、包装类的缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Caiaixiong/article/details/85028710

自动装箱和自动拆箱

自动装箱和自动拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5后,Java引入了自动装箱(autoboxing)/拆箱(unboxing)。

自动装箱

基本类型的数据处于需要对象的环境中,会自动转换成“对象”。
以Integer为例,在JDK1.5之前,这样的代码Integer i = 5;是错误的,必须通过Integer i = new Integer(5);这样的语句来实现基本数据类型转换成包装类的过程;而在JDK1.5之后,Java提供了自动装箱的功能,因此只需要Integer i = 5;这样的语句就能实现基本数据类型转换成包装类,这是因为JVM为我们执行了Integer i = Integer.valueOf(5);这样的操作。

自动拆箱

每当需要一个值时,对象会自动转换成基本数据类型,没必要显式调用intValue()等转型方法。

包装类的缓存问题

整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。
缓存的原理为:如果数据在[-128,127],那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache数组中。每当自动装箱过程发生时(或者手动调用valueOf()方法),就会先判断数据是否在区间内,如果在则直接获取数组中对应的包装类对象的引用,如果不在区间内,则会通过new调用包装类的构造方法来创建对象。

猜你喜欢

转载自blog.csdn.net/Caiaixiong/article/details/85028710