java装箱和拆箱

本文详细介绍了Java中的装箱(基本类型转包装类)和拆箱(包装类转基本类型)过程,通过代码示例和深入理解,讲述了valueOf和intValue方法的作用以及127与128在Integer对象缓存中的区别。
摘要由CSDN通过智能技术生成

装箱拆箱

1)基本数据类型和对应的包装类

在这里插入图片描述

2)装箱拆箱定义

装箱:就是将基本数据类型转换为包装类类型;
拆箱:就是将包装类类型转换为基本数据类型。
包装类:在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。

3)代码实现

一.装箱

 int a=10;
 Integer b=Integer.valueOf(a);

上面的代码其实就是装箱的过程,就是把基本数据类型装换为Integer类型,这里调用了一个Integer类下的静态方法,如下面代码所示:

    public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
       return IntegerCache.cache[i + (-IntegerCache.low)];
       return new Integer(i);
    }

可以看到它返回的是一个Integer类型的对象,所以这样我们就实现了装箱

二.拆箱:

  Integer b=Integer.valueOf(a);
  int c= b.intValue();

上面代码就是进行一个拆箱,可见调用了Integer类下的一个方法intValue,其作用就是返回b的值,并且此类型为int,讲解一下转换过程如下:

   private final int value;
   
   public static Integer valueOf(int i) {
      if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    
  public Integer(int value) {
      this.value = value;
    }
    
    public int intValue() {
        return value;
    }

上面的代码就是在装箱拆箱会使用到的方法,这些方法都是包装类Integer类下的方法,首先我们在装箱的时候会调用valueOf方法,可以看到此方法返回的是Integer对象,因为在实例化的同时会进行构造方法的调用,所以我们就会调用Integer的构造放法,对Integer的成员变量进行初始化,此时Integer类下的成员变量value就初始化好你在装箱时赋的值,然后在拆箱时会调用intValue方法,这个方法就是把初始化好的value值返回,并且可以看到value的类型和intValue的返回类型均为基本数据类型int,此时就把Integer类型转换为int了

4)题目讲解(深入理解)

    public static void main(String[] args) {
        Integer a=127;
        Integer b=127;
        Integer c=128;
        Integer d=128;
        System.out.println(a==b);
        System.out.println(c==d);
    }


答案的结果a等于b,c不等于d
解释:首先我们要明确的是==号是比较什么的,==号是比较地址的,java为了减少新建对象的消耗,然后java已经创建了一个数值为[-128,127]的对象,也可以类型宇String的常量池,所以我们就可以解释上面的答案了,由于a和b是127在[-128,127]范围内,所以指向java已经有这个数值的地址了,由于其指向的地址一样,结果为true,同理,c和d由于都超过了范围,所以java就没有提供现有的地址空间让其指向,所以c和d就只能new一个新的空间,因此其地址就会不同。
下图可以理解一下new这里
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值