java装箱和拆箱的记录

概念:

        装箱:将基本数据类型转换为包装器类型(比如:int 转为Integer 、double 转为Double)

        代码:Integer i=new Integer(3);

         装箱过程:调用valueof()方法装箱

        拆箱:将包装器类型转换为基本数据类型(比如:Integer 转为int 、Double转为double )

        代码:int k=i.intValue();

        自动装箱与拆箱(Java SE5以后):


        在Java SE5 之前要定义一个数值为5的Integer:

          Integer in=new Integer(5) (这个是装箱过程,但不是自动装箱)

         自动装箱:Integer in=5;

         自动拆箱:int k=in;(不用手动调用intValue())

         说明:

装箱与拆箱的比较:

           重要的点:

          1.对于基本数据类型其包装类进行比较操作(equals,==),其返回值都是true,因为基本数据类型的包装类的equals()方法都              被重写为值的比较

          2. 对于包装类本身的比较

          Integer in=new Integer(10)

          Integer on=new Integer(10)

          (1)in.equals(on) 返回为true,如1中说的equals方法被重写为值的比较

          注意:如果Long l=new Long(10L),in.equals(l)返回false,因为这是不同包装类(Long,Integer)之间的比较,只有在 a.equals(c)          中c为a的基本数据类型或者包装类比较才会进行值的比较

          (2)in==on 返回true;

          但是 如果整形变量的值不是[-128,127]区间内的值,in==on就会返回false,如:

          Integer a=new Integer(129)

          Integer b=new Integer(129)

          Integer temp=new Integer(0) 

          原因:装箱是通过valueof()方法将基本数据类型转换为包装类的,Integer的valueof方法里面会判断传入的基本类型是否在这个           [-128,127]区间内,如果在就会直接取放在IntegerCache.cache数组内的值,不在就会new一个 Integer对象

          (3)a==(b+temp)  注意虽然不在[-128,127]区间内,但是返回值为true;

          原因当 “==”运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作            数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)

 

       注意:Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的(都有一个区间,在区间范围 内new               比较返回true)。Double、Float的valueOf方法的实现是类似的(没有区间,即每次new 都会新建一个对象,比较返回false)。

        

        

        

        

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值