Java装箱与拆箱

本文详细解释了Java中基本数据类型与包装类的装箱与拆箱过程,包括手动和自动转换,以及JDK1.5后引入的自动功能。特别关注了Integer类型的实例,以及在边界值128时的缓存与堆内存使用情况。
摘要由CSDN通过智能技术生成

      装箱是将基本数据类型转换为包装类型,如int类型转换为Integer类型;拆箱是将包装类型转换为基本数据类型,如Integer类型转换为int类型。

                          包装类和基本数据类型的对应关系

                                             包装类的结构

Integer类型的装箱与拆箱

Integer变量名 = new Integer(int类型数据变量); //Integer的装箱操作
int 变量 = Integer对象.intValue();            //Integer的拆箱操作

例子如下:

int x = 9;
Integer xInteger = new Integer(x);    //装箱
int xTemp = xInteger.intValue();      //拆箱

Integer类型的自动装箱与拆箱 

Integer 变量名 = int 类型的表达式;       //Integer的自动装箱
int 变量 = Integer 对象;                //Integer的自动拆箱

例子如下: 

int x = 9;
Integer xInteger = x;          //自动装箱
int xTemp = xInteger;          //自动拆箱

JDK1.5后,Java提供自动装箱和拆箱功能,装箱和拆箱由Java自动完成而不需要人为干预,自动装箱和拆箱减轻了 编程人员负担,简化了软件设计。

  下面来看个例子:

public class Sad {
    public static void main(String[] args) {
        Integer b = 127;
        Integer a = 127;
        if(a == b){     //a,b作为对象在这里并不是大小而是地址,不可以比较但JVM自动拆包将它们转换 
                       //为基本数据类型来比较
            System.out.println("相爱!");
        }else {
            System.out.println("相杀!");
        }
    }
    }

运行效果如图: 如果赋值为128会出现啥情况嘞?请继续往下思考

public class Sad {
    public static void main(String[] args) {
        Integer b = 128;
        Integer a = 128;
        if(a == b){     
            System.out.println("相爱!");
        }else {
            System.out.println("相杀!");
        }
    }
    }

运行效果如图:

结果和想象中大相径庭 !让我们来看看源码吧

从中可以看到赋值在-128~127才会放在缓存里面而超过范围的就放到了不同的地方,堆里面。所以要在-128~127之间的才可以正确判断。

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值