Java中Integer类型装箱拆箱及其注意点

本文探讨了Java中装箱与拆箱的概念及其工作原理,特别是针对Integer类的行为进行了详细说明。介绍了-128至127范围内整数的特殊处理方式,并通过示例代码演示了对象比较时==与equals方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      Java中,一般地,我们使用数据类型的时候,会直接使用int,double,byte,long等内置类型,但是在某些场合下,我们会遇到需要使用对象而非内置数据类型的情况。 Java语言为每一个内置数据类型提供了包装类,这些包装类包括Intger,Double等,此文我们拿Integer进行分析。
      这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当做对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。

    public class Test{

     public static void main(String args[]){

         Integer x = 5;

         x = x + 10;

        System.out.println(x);

}}

     在以上代码中,当我们为Integer类型的x赋值5的时候,编译器对5进行了装箱操作,相当于调用了Integer.valueOf(5)。而在x=x+10时候,编译器又对x进行了拆箱操作,因为只有内置类型才支持+操作。特别要注意的一点是,对于-128到127之间的数值,装箱后都会放在内存里进行重用,也就是说Integer a = 5和Integer b = 5,系统都会去复用同一个对象,所以a和b实际上指向同一个对象的地址。但如果超过了这个规定的访问,系统会重新new一个Integer对象出来,如Integer a = 555和Integer b = 555,此时a和b两个对象便指向了不同对象的地址。

public class Number {
    public static void main(String[] args) {
        /**
        Integer i1 = 128;  // 装箱,相当于 Integer.valueOf(128);
        int t = i1; //相当于 i1.intValue() 拆箱
        System.out.println(t);
        */

        
        Integer i1 = 200;
        Integer i2 = 200;

       
        if(i1==i2) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}

 == 和equal的区别也是老生常谈了,==是比较i1和i2指向的对象地址值,equals则是比较i1和i2指向的两个对象的值是否相等。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值