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

自动拆箱和装箱时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(没有缓存)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值