最易理解的自动拆箱和装箱

来源:互联网 发布:魂斗罗游戏源码 编辑:程序博客网 时间:2024/06/10 19:55

自动拆箱和装箱时JDK1.5的新特性。

  • 目的及作用
    就是用来进行基本数据类型(long、int、short、byte、double、float、boolean、char)和包装类型(Long、Integer、Short、Byte、Double、Float、Boolean、Character)之间的转换。

自动装箱意思就是把基本数据类型的值赋给包装类型(基本数据类型——>包装类型)。
反之自动拆箱意思就是把包装类型的值赋给基本数据类型(包装类型——>基本数据类型)。


具体是怎么做到的可以去看源码,小的才疏学浅只能简单的说是包装类型使用了两个方法:

  1. 使用valueOf()的方法对基本数据类型进行包装。
  2. 使用intVlaue()的方法可以得到基本数据类型。
Integer integer = new Integer(23);int i = integer.intVlaue();

   对于自动拆箱和装箱还有特别需要记住的就是包装类的一个特性,下面随小的来看一个特别有意思的程序。
        public static void main(String[] args) {            Integer integer1 = 100;            Integer integer2 = 100;            System.out.println(integer1 == integer2);            Integer integer3 = 1000;            Integer integer4 = 1000;            System.out.println(integer3 == integer4);    }

对于上面这段代码你们认为最终输出的结果会是什么呢?

下面揭晓答案:
这里写图片描述
那么为什么会出现这样的情况呢?
这是因为包装类的valueOf()方法在作怪!!! 当进行基本数据类型转成包装类型(即自动装箱)时,Byte、Integer和Long这些包装类中缓存了一个-128~+127之间的对象,如果对象值在这个范围之内,则直接返回缓存的对象,只有当缓存中没有的时候也就是不在-128~+127之间,那么会再去创建一个对象。
再来包装类的缓存:
Boolean:(全部缓存)
Byte:(全部缓存)
Character(<= 127缓存)
Short(-128 — 127缓存)
Long(-128 — 127缓存)
Integer(-128 — 127缓存)
Float(没有缓存)
Doulbe(没有缓存)