滚雪球学Java(07):自动装箱、自动拆箱,Java开发者必备技能

2024-04-25 21:26:06 浏览数 (2)

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~

代码语言:js复制
环境说明:Windows 10   IntelliJ IDEA 2021.3.2   Jdk 1.8

前言

  Java 是一种强类型语言,数据类型的转换是 Java 编程中最基本的操作之一。Java 中的基本类型转换、包装类、自动装箱和自动拆箱是 Java 编程中常用的操作。正确地应用这些知识点可以使程序的性能得到优化。

摘要

  本文将介绍 Java 中基本类型转换、包装类、自动装箱、自动拆箱的概念。我们将详细说明这些概念,并提供源代码和测试用例以帮助读者更好地理解和应用这些知识点。

正文

基本类型转换

  Java 中的基本类型转换是将一种基本数据类型转换为另一种基本数据类型的操作。Java 中的基本数据类型有 byte、short、int、long、float、double、char、boolean。

  类型转换主要有两种形式:自动类型转换和强制类型转换。

自动类型转换

  自动类型转换是指从一个小的类型转换为一个大的类型,比如将 byte 类型转换为 int 类型、将 short 类型转换为 long 类型、将 float 类型转换为 double 类型。

  自动类型转换是由编译器自动完成的,不需要程序员手动转换。在进行自动类型转换时,编译器将自动把小的类型转换为大的类型,不会丢失数据。

下面是一个自动类型转换的例子:

代码语言:java复制
byte b = 10;
int i = b;      // 自动类型转换
System.out.println(i);

在上面的代码中,byte 类型的变量 b 被自动转换成了 int 类型的变量 i。

强制类型转换

  强制类型转换是指将一个大的类型转换为一个小的类型,比如将 int 类型转换为 byte 类型、将 double 类型转换为 float 类型、将 long 类型转换为 short 类型。

  强制类型转换需要程序员手动完成,并且会丢失数据。在进行强制类型转换时,需要使用圆括号将要转换的类型括起来。

下面是一个强制类型转换的例子:

代码语言:java复制
int i = 100;
byte b = (byte) i;      // 强制类型转换
System.out.println(b);

  在上面的代码中,int 类型的变量 i 被强制转换成了 byte 类型的变量 b。

包装类

  Java 中的包装类是将基本数据类型封装成对象的类。Java 中的包装类有 Byte、Short、Integer、Long、Float、Double、Character、Boolean。

  使用包装类可以将基本类型转换成对象,这样可以使用对象的方法来访问变量和进行操作。

下面是一个使用包装类的例子:

代码语言:java复制
Integer i = new Integer(100);
System.out.println(i.intValue());

  在上面的代码中,使用 Integer 包装类将 int 类型的 100 封装成对象 i,并使用其 intValue() 方法来访问 i 的值。

自动装箱和自动拆箱

  自动装箱和自动拆箱是 Java 5 引入的新特性。它们可以将基本类型和包装类之间进行自动转换。

自动装箱

  自动装箱是指将基本类型自动转换为包装类。当程序需要将基本类型的值赋给包装类对象时,编译器会自动将基本类型转换为包装类对象。这个过程也被称为自动封箱。

下面是一个自动装箱的例子:

代码语言:java复制
Integer i = 100;      // 自动装箱
System.out.println(i);

  在上面的代码中,将 int 类型的 100 赋值给包装类 Integer 对象 i,编译器自动将 int 类型的值装箱为 Integer 对象。

自动拆箱

  自动拆箱是指将包装类自动转换为基本类型。当程序需要将包装类对象的值赋给基本类型时,编译器会自动将包装类对象转换为基本类型。这个过程也被称为自动拆箱。

下面是一个自动拆箱的例子:

代码语言:java复制
Integer i = new Integer(100);
int j = i;       // 自动拆箱
System.out.println(j);

  在上面的代码中,将 Integer 对象 i 的值赋值给 int 类型的 j,编译器自动将 Integer 对象 i 拆箱为基本类型的 int。

代码演示

基本类型转换

代码示例
代码语言:java复制
package com.demo.javase.day07;

/**
 * 基本类型转换
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:37
 */
public class TypeConversionExample {

    public static void main(String[] args) {
        // 自动类型转换
        byte b = 10;
        int i = b;
        System.out.println(i);

        // 强制类型转换
        int j = 100;
        byte k = (byte) j;
        System.out.println(k);
    }
}
代码解析

  这段代码演示了Java中的类型转换。首先,在第6行,将byte类型变量b的值赋给int类型变量i,这是一种自动类型转换,因为byte可以自动转换为int。接着,在第9行,将int类型变量j的值强制转换为byte类型变量k,这是一种强制类型转换,因为int不能自动转换为byte,需要使用强制转换符将类型进行转换。最后,分别打印i和k的值。本例输出结果为:

代码语言:java复制
10
100

  其中,第一行输出i的值,为变量b的值10,这是因为将byte类型自动转换为int类型时,不会发生数据丢失。

  第二行输出k的值,为变量j的值100强制转换后的结果,为-100,这是因为byte的取值范围为-128到127,而将int类型的值100强制转换为byte类型时,超出了byte类型的取值范围,导致发生了数据溢出。

执行结果

包装类

代码示例
代码语言:java复制
package com.demo.javase.day07;

/**
 * 包装类
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:38
 */
public class WrapperClassExample {

    public static void main(String[] args) {
        Integer i = new Integer(100);
        System.out.println(i.intValue());
    }
}
代码解析

  这段代码展示了如何使用 Integer 类型的包装类。其中,Integer 是一个类,它可以将一个基本类型的 int 值包装成一个对象。在这个例子中,我们创建了一个 Integer 对象 i,并使用它的 intValue() 方法获取它包装的 int 值(即 100),并将其打印到控制台上。这是一个简单的示例,展示了包装类的基本用法。

运行结果

自动装箱和自动拆箱

代码示例
代码语言:java复制
package com.demo.javase.day07;

/**
 * 自动装箱和自动拆箱
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:41
 */
public class AutoBoxingExample {

    public static void main(String[] args) {
        // 自动装箱
        Integer i = 100;
        System.out.println(i);

        // 自动拆箱
        Integer j = new Integer(100);
        int k = j;
        System.out.println(k);
    }
}
代码解析

  该代码演示了 Java 中的自动装箱和自动拆箱。其中,自动装箱是指将基本类型自动转换为对应的包装类类型,而自动拆箱是指将包装类自动转换为对应的基本类型。

  在代码中,第一行通过将 int 类型的 100 自动装箱成了 Integer 类型的 i,然后输出了 i 的值。第四行将一个新建的 Integer 对象 j 自动拆箱成了 int 类型的 k,然后输出了 k 的值。

  通过这两个例子,我们可以看到 Java 中的自动装箱和自动拆箱可以让代码更加简洁易懂。

运行结果

代码方法介绍

基本类型转换

  • byteintint i = b;
  • intbytebyte k = (byte) j;

包装类

  • 创建一个 Integer 对象:Integer i = new Integer(100);
  • 调用 Integer 对象的 intValue() 方法:i.intValue();

自动装箱和自动拆箱

  • 自动装箱:Integer i = 100;
  • 自动拆箱:int k = j;

测试用例

测试代码

我们可以通过编写测试用例来验证代码的正确性。下面是一个测试用例的示例:

代码语言:java复制
package com.demo.javase.day07;

/**
 * 自动装箱、自动拆箱等综合测试
 *
 * @author bug菌
 * @version 1.0
 * @date 2023/10/10 17:42
 */
public class TypeConversionTest {

    public static void main(String[] args) {
        // 自动类型转换
        byte b = 10;
        int i = b;
        System.out.println(i);

        // 强制类型转换
        int j = 100;
        byte k = (byte) j;
        System.out.println(k);

        // 包装类
        Integer x = new Integer(100);
        System.out.println(x.intValue());

        // 自动装箱和自动拆箱
        Integer y = 100;
        int z = y;
        System.out.println(y.intValue());
        System.out.println(z);
    }
}

测试结果

测试代码解析

  该代码主要测试了Java中的类型转换、自动装箱和自动拆箱功能。

  首先定义了一个名为TypeConversionTest的类。在该类的main方法中,分别进行了以下测试:

  1. 自动类型转换

  定义一个byte类型的变量b,并赋值为10,然后将其赋值给一个int类型的变量i,这就是自动类型转换。最后输出i的值,结果为10。

  1. 强制类型转换

  定义一个int类型的变量j,并赋值为100,然后将其强制转换为byte类型,并赋值给一个byte类型的变量k。最后输出k的值,由于byte类型的取值范围为-128~127,而100不在此范围内,因此k的值为-100。

  1. 包装类

  定义一个Integer类型的变量x,赋值为100,并使用intValue()方法将其转换为int类型,然后输出其值,结果为100。

  1. 自动装箱和自动拆箱

  定义一个Integer类型的变量y,赋值为100,然后将其赋值给一个int类型的变量z,这就是自动拆箱。同时,将100赋值给y,这就是自动装箱。最后分别输出y的值和z的值,结果均为100。

  综上,该代码涵盖了Java中类型转换、自动装箱和自动拆箱等多种特性的测试。

  ... ...

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,

0 人点赞