• Java 入门:装箱与拆箱


    引言

    在这篇文章中,我们将使用一些示例,来学习 Java 中的装箱与拆箱操作。原始数据类型的处理是不同的,因此引入了包装类,其中有两个组件起着作用,即自动装箱和解箱。

    为何需要原始类型与包装类?

    Java 是基于面向对象设计的,因此,每创建一次包装类型就会放到堆里,然后通过栈中的地址来找寻堆中的对象。那么像经常使用的 int、double、float 等基础类型,每次都创建为对象会变的效率低下。因此就出现了基本类型,直接将变量值存在栈中。但是基本类型不具有对象性质,当我们使用集合的时候,又可以使用其包装类型。当然,我们每次使用的时候,例如往集合中添加基本类型,Java 会自动装箱为包装类,后面的示例也会演示到。

    Java 装箱 - 原始类型到包装类对象

    所谓装箱,就是 Java 编译器会自动将原始类型转换为其相应的包装类对象。
    示例:

    1. int a = 10;
    2. // 装箱操作
    3. Integer b = a;

    在使用Java集合时,装箱有很大的优势。

    示例 1: 使用 Java 集合时的装箱操作

    1. import java.util.ArrayList;
    2. public class AutoBoxing {
    3. public static void main(String[] args) {
    4. ArrayList list = new ArrayList<>(4);
    5. // 装箱
    6. list.add(2022);
    7. list.add(82);
    8. System.out.println("list=> " + list);
    9. }
    10. }

    输出:

    list=> [2022, 82]
    

    在上述的示例中,我们创建了一个基于 Integer 类型的集合。因此,集合列表只能容纳 Integer 类型的对象。
    注意这一行:

    list.add(2022);
    

    这里,我们显然正在传递原始类型的值。然由于自动装箱,原始值被自动转换为整数对象并存储在数组列表中。

    Java 拆箱 - 包装类对象到原始类型

    在拆箱中,Java编译器会自动将包装类对象转换为其相应的原始类型。
    示例:

    1. // 装箱
    2. Integer b = 56;
    3. // 拆箱
    4. int a = b;

    和自动装箱一样,拆箱也可以用在Java集合中。

    示例 2:Java 集合取值拆箱

    1. import java.util.ArrayList;
    2. public class AutoBoxing {
    3. public static void main(String[] args) {
    4. ArrayList list = new ArrayList<>(4);
    5. // 装箱
    6. list.add(2022);
    7. list.add(82);
    8. System.out.println("list=> " + list);
    9. // 拆箱
    10. int c = list.get(0);
    11. System.out.println("c val: " + c);
    12. }
    13. }

    输出:

    1. list=> [2022, 82]
    2. c val: 2022

    在上面的例子中,请注意这一行:

    int c = list.get(0);
    

    在这里,get()方法返回索引为 0 的对象。 然而,由于自动拆箱,该对象被自动转换为原始类型 int 并分配给变量c。

  • 相关阅读:
    【C#】复杂Json的反序列
    UVM 覆盖率
    pyflink连接iceberg 实践
    [正确重装docker] Win10 重装 Docker 提示 Exising installation is up to date 的正确姿势
    colcon build --symlink-install 出现 colcon: 未找到命令
    极简示例揭示 SwiftUI 中 @ObservedObject 与 @StateObject 状态的关键区别
    matlab 优化问题
    docker搭建私有仓库并推送本地镜像
    节点电价形成机制
    Python函数详解(三)——函数的参数传递进阶
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/126189444