Java 装箱与拆箱详解及实例代码

Java 装箱与拆箱详解及实例代码

什么是装箱与拆箱

在Java中,基本的数据类型包括byte, short, int, long, float, double, char, boolean等。而Java中还有一种引用类型,例如String、Scanner等。在此基础上,Java还增加了一种特殊的包装类型,它们分别是Byte, Short, Integer, Long, Float, Double, Character, Boolean。这些包装类型可以将基本类型的数据“包装”在内,在某些时候可以避免“自动拆箱”(unboxing)带来的一些问题。

装箱与拆箱就是指基本类型与对应的包装类型之间的转换。将基本类型转换成引用类型的过程称为装箱,将引用类型转换成基本类型则称为拆箱。而在Java中,对于基本类型和包装类型之间的赋值、传参等操作,编译器都会自动完成装箱和拆箱操作。

装箱与拆箱示例

装箱

int num = 20;
Integer number = Integer.valueOf(num);

在上述代码中,将基本类型的整型变量num通过静态方法valueOf转换为对应的包装类型,即装箱操作。

拆箱

Integer number = Integer.valueOf(30);
int num = number.intValue();

在上述代码中,将包装类型的整型变量number通过实例方法intValue转换为对应的基本类型,即拆箱操作。

装箱拆箱的作用

  • 将基本数据类型转换为对象类型,能够为基本类型赋予更多的属性和方法。
  • 使基本数据类型具有对象的特征,比如能够作为方法的参数,能够使用Object类的方法。
  • 在泛型操作中可以自动装箱和拆箱,使得代码更加简洁。

装箱与拆箱的注意事项

1. 装箱时可能会有“数据池”的概念

在Java中,基本类型和对应的包装类型都有“常用值”的概念。比如int类型的0,在Java中是非常常用的,所以在装箱时,Java认为重复使用相同的常用值是很常见的事情。所以会实现一个“代码池”,可以缓存常用值,避免前后相同的装箱操作重复创建实例。但是,对于溢出或超出常用值区间的数值,会新建对象。

2. 拆箱时可能会抛出NullPointerException异常

如果包装类型对象为null,在进行拆箱操作时会抛出NullPointerException异常。

Java 装箱与拆箱的实践

下面我们通过一个简单的例子来进行装箱与拆箱的实践。

public class BoxDemo {
    public static void main(String[] args) {
        int num = 20;
        Integer number = Integer.valueOf(num);
        System.out.println("装箱后的值: " + number);

        int num2 = Integer.valueOf(30).intValue();
        System.out.println("拆箱后的值: " + num2);
    }
}

在上述代码中,我们演示了如何进行装箱和拆箱操作,并且通过打印输出了它们的结果。

总结

  • 在Java中,装箱和拆箱操作是将基本类型和对应的包装类型相互转换的操作。
  • 装箱操作可以通过包装类型的静态方法valueOf进行。
  • 拆箱操作可以通过包装类型的实例方法intValue进行。
  • 装箱和拆箱操作的作用主要是为了使基本类型具有对象的特征,并且可以在泛型操作中方便地使用。
  • 在装箱和拆箱操作中可能会有一些需要注意的点,比如对象池和空指针异常等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 装箱与拆箱详解及实例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • java代码实现C盘文件统计工具

    Java代码实现C盘文件统计工具 本攻略介绍如何使用Java编写一个C盘文件统计工具,可以计算C盘某个目录下的文件数量、目录数量、总大小等信息,并输出到控制台。 步骤一:创建Java项目 首先,打开Eclipse,在工作区中创建一个Java项目。 选择菜单栏中的 “File” –> “New” –> “Java Project”。 输入项目的…

    Java 2023年5月19日
    00
  • 基于java中泛型的总结分析

    下面是“基于Java中泛型的总结分析”的完整攻略。 什么是泛型? 泛型是Java 1.5版本中引入的一个新特性,它允许在编译时期实现类型检查和类型参数化。 通俗地说,泛型就是一种参数化的类型,它对不同的数据类型具有通用性。通过使用泛型,编译器可以在编译时期检查类型的匹配情况。 泛型的优缺点 泛型的优点: 增加代码的可读性和安全性,减少代码的重复量; 提供了类…

    Java 2023年5月26日
    00
  • springboot注册bean的三种方法

    以下是详细讲解“Spring Boot注册Bean的三种方法”的攻略。 简介 在Spring Boot应用程序中,可以使用三种方法注册Bean: @ComponentScan + @Component 注册:使用注解扫描机制,标记bean组件并创建自动扫描Spring Boot应用程序中的bean。可以在类上使用@Component、@Service、@Re…

    Java 2023年5月15日
    00
  • java使用poi导出Excel的方法

    下面是关于”Java使用POI导出Excel的方法”的完整攻略。 简介 POI是Apache基金会的开源项目,可以用Java编写程序生成Microsoft Office文档格式,包括Word、Excel和PowerPoint。POI能够读取和写入Microsoft Office文件的各种属性和内容。在本教程中,我们将学习如何利用POI将数据导出到Excel文…

    Java 2023年5月20日
    00
  • 详谈Android编译命令

    介绍Android编译命令Android编译命令是指在编译Android源码时使用的命令,常用的命令包括make、m、mm、mma等。这些命令可以在终端中执行,具体的使用方法和参数可以查看Android源码中的makefile文件和系统文档。 make命令make命令是一个常用的编译命令,可以在根目录下的Makefile文件中定义要编译的模块和相应的编译选项…

    Java 2023年5月26日
    00
  • java获取IP归属地全网显示开源库使用

    获取IP归属地是许多Web开发、网络安全等领域的必备技能,实现这一功能需要使用到一些开源的库。本文将介绍Java获取IP归属地全网显示开源库的使用方法,包含如下内容: IP归属地库的选择 库的安装和配置 如何使用库获取IP归属地 示例说明 IP归属地库的选择 在Java中获取IP归属地需要使用第三方库,常见的库有GeoLite2和ip2region等。这些库…

    Java 2023年5月26日
    00
  • Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    下面来详细讲解“Spring Boot整合MyBatis使用注解实现动态SQL、参数传递等常用操作(实现方法)”的完整攻略,包括以下几个方面: 环境准备: 在使用MyBatis前,需要包含所需的依赖包,这里我们将使用Maven管理依赖进行配置。在pom.xml文件中添加以下代码: <dependency> <groupId>org.m…

    Java 2023年5月20日
    00
  • mybatis基本实例详解

    Mybatis基本实例详解 Mybatis是一款开源的持久化框架,它可以将数据库的操作和Java代码解耦,大大简化了数据访问层的开发。本文将介绍Mybatis基本实例,包含如下内容: Mybatis简介 Mybatis基本配置 Mybatis增删改查示例1 Mybatis增删改查示例2 Mybatis简介 Mybatis是一款优秀的持久层框架,它为Java开…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部