包装类实现原理分析、装箱与拆箱

包装类实现原理分析、装箱与拆箱

包装类

  • 如果想要将基本数据类型以类的形式进行处理,那么就需要对其进行包装。
  • 包装处理过后可以像对象一样进行引用传递、包装过后就可以用Object进行接收
  • Java 已经提供了包装类:
    • 对象型包装类(Object直接子类)Boolean、Character
    • 数值型包装类:(Number直接子类,Number是一个抽象类) Byte、Short、Integer、Long、Float、Double

Number 类有 6 个方法:

NO.方法名称描述
1public abstract int intValue()从包装类中获取int数据
2public abstract long longValue()从包装类中获取long数据
3public abstract float floatValue()从包装类中获取float数据
4public abstract double doubleValue()从包装类中获取double数据
5public byte byteValue()从包装类中获取byte数据
6public short shortValue()从包装类中获取short数据

装箱:将基本数据类型保存在包装类之中
拆箱:从包装类对象中获取基本数据类型

以 int 数据类型为例进行包装处理:

class Int{
    private final int data;
    public Int(int data){
        this.data = data;
    }
    public int intValue(){
        return this.data;
    }
}
public class JavaDemo {
    public static void main(String[] args) {
        Object obj = new Int(10);   // 装箱
        int x = ((Int)obj).intValue() ;  //拆箱
        System.out.println(x);
    }
}
// 运行结果
10

Process finished with exit code 0

传统装箱、拆箱操作

public class JavaDemo {
    public static void main(String[] args) {
        Integer obj = new Integer(10);   // 传统装箱操作
        System.out.println(obj.intValue());// 传统拆箱操作
    }
}

自动装箱 自动拆箱

在JDK 1.9之后,包装类的构造方法已经不建议使用,目前提供了更为方便的自动装箱和自动拆箱操作

public class JavaDemo {
    public static void main(String[] args) {
        Integer obj = 10;  // 自动装箱
        System.out.println(obj);  // 自动拆箱
    }
}

包装类可以直接参与运算

public class JavaDemo {
    public static void main(String[] args) {
        Integer obj = 10;
        System.out.println(obj);
        obj++;
        System.out.println(obj * 10);
    }
}
10
110

Process finished with exit code 0

自动装箱最大的好处是可以实现 Object接收基本数据类型的操作

Object 接收 Double 类实例

public class JavaDemo {
    public static void main(String[] args) {
        Object obj =77.77; // double 自动装箱为 Double 类,向上转型为 Object
        double num = (Double) obj;  // 向下转型,自动拆箱
        System.out.println(num * 6);
    }
}

在使用包装类进行相等判断的时候最好使用 equals()方法完成,因为如果占位超过一位,用 == 就不能判断了。

public class JavaDemo {
    public static void main(String[] args) {
        Integer x = 127;
        Integer y = 127;
        System.out.println(x == y);
    }
}
// 运行结果
true

Process finished with exit code 0
public class JavaDemo {
    public static void main(String[] args) {
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);
    }
}
// 运行结果
false

Process finished with exit code 0
public class JavaDemo {
    public static void main(String[] args) {
        Integer x = 128;
        Integer y = 128;
        System.out.println(x.equals(y));
    }
}
// 运行结果
true

Process finished with exit code 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值