深入探究Java自动拆箱与装箱的实现原理

2023-11-21 11:34:27 浏览数 (1)


theme: healer-readable

highlight: a11y-dark


哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

Java是目前最常用的编程语言之一,它具有简单易学、跨平台、面向对象等优点,被广泛应用于各种应用开发中。在Java的基础语法中,自动拆箱和装箱是常见的概念,本文将详细介绍这两个概念的含义、应用场景和优缺点。

摘要

本文主要介绍Java中的自动拆箱和装箱概念。自动拆箱是将封装类型的变量自动转换为基本类型的变量,而自动装箱则是将基本类型的变量自动转换为封装类型的变量。本文将详细介绍这两个概念的含义、应用场景和优缺点。

自动拆箱和装箱

简介

Java中的自动拆箱和装箱是由JDK1.5引入的新特性。在Java中,有8种基本数据类型:byte、short、int、long、float、double、char和boolean,而为了保证Java的完全面向对象性质,Java又为每个基本数据类型提供了对应的封装类型:Byte、Short、Integer、Long、Float、Double、Character和Boolean。自动拆箱和装箱的概念主要涉及到基本类型的变量和封装类型的变量之间的转换。

源代码解析

自动拆箱

在Java中,自动拆箱是将封装类型的变量自动转换为基本类型的变量。自动拆箱是在编译器中自动完成的,不需要开发者手动进行。

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

代码语言:java复制
Integer i = new Integer(10);
int j = i;

在这个示例中,将一个封装类型的变量i赋值给一个基本类型的变量j,编译器会自动将i转换为int类型的数值10,然后赋值给j。

自动装箱

自动装箱则是将基本类型的变量自动转换为封装类型的变量。与自动拆箱类似,自动装箱也是在编译器中自动完成的。

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

代码语言:java复制
int i = 10;
Integer j = i;

在这个示例中,将一个基本类型的变量i赋值给一个封装类型的变量j,编译器会自动将i转换为Integer类型的对象,然后赋值给j。

应用场景案例

自动拆箱

自动拆箱在Java中的应用场景非常广泛,下面列举几个常见的例子:

  1. 数组的元素必须是基本类型的变量,因此如果需要将封装类型的变量存放到数组中,就需要进行自动拆箱操作。
代码语言:java复制
Integer[] arr1 = {1, 2, 3};
int[] arr2 = {new Integer(1), new Integer(2), new Integer(3)};
  1. 将封装类型的变量传递给参数为基本类型的方法时,需要进行自动拆箱操作。
代码语言:java复制
public void print(int num) {
    System.out.println(num);
}
Integer i = new Integer(10);
print(i);

自动装箱

自动装箱也有一些常见的应用场景,下面列举几个例子:

  1. 自动装箱可以方便地将基本类型的变量转换为对应的封装类型,便于在面向对象的编程中使用。
代码语言:java复制
int i = 10;
Integer j = i;
  1. 在调用泛型方法时,需要将基本类型的变量转换为对应的封装类型,以便能够使用集合类型。
代码语言:java复制
public <T> void printList(List<T> list) {
    for (T t : list) {
        System.out.println(t);
    }
}
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
printList(list);

优缺点分析

优点

自动拆箱和装箱能够方便地将基本类型的变量和封装类型的变量进行转换,使得Java在面向对象编程中更加完整。

缺点

自动拆箱和装箱的操作需要在编译期进行转换,因此会在一定程度上影响程序的性能。

类代码方法介绍

下面是一个封装了自动拆箱和装箱的类AutoBoxing,包括两个方法autoUnboxing和autoBoxing:

代码语言:java复制
public class AutoBoxing {
    public static int autoUnboxing(Integer i) {
        return i;
    }
    
    public static Integer autoBoxing(int i) {
        return i;
    }
}

方法autoUnboxing接收一个封装类型的变量i,返回一个基本类型的变量。方法autoBoxing接收一个基本类型的变量i,返回一个封装类型的变量。

测试用例

测试代码演示

下面是一个使用AutoBoxing的测试用例:

代码语言:java复制
package com.example.javase.se.classes.packaging;

/**
 * @Author ms
 * @Date 2023-11-05 19:03
 */
public class test {

    public static void main(String[] args) {
        AutoBoxing test = new AutoBoxing();
        test.autoUnboxing(1);
        test.autoBoxing(2);
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

这是一个Java程序的源代码,包名为com.example.javase.se.classes.packaging,类名为test。它包含了一个名为main的静态方法,该方法的参数为String数组args。

在main方法中,先创建了一个AutoBoxing类的实例test。然后分别调用了该实例的autoUnboxing和autoBoxing方法,并向这两个方法传入了整数类型的参数1和2。

程序的具体功能需要查看AutoBoxing类的代码。这是一个Java程序的源代码,包名为com.example.javase.se.classes.packaging,类名为test。它包含了一个名为main的静态方法,该方法的参数为String数组args。

在main方法中,先创建了一个AutoBoxing类的实例test。然后分别调用了该实例的autoUnboxing和autoBoxing方法,并向这两个方法传入了整数类型的参数1和2。

程序的具体功能需要查看AutoBoxing类的代码。

全文小结

本文主要介绍了Java中的自动拆箱和装箱概念,包括它们的含义、应用场景以及优缺点分析。通过示例代码和测试用例,展示了自动拆箱和装箱的操作方式及其效果。

总结

自动拆箱和装箱是Java编程中常见的操作,利用它们能够方便地实现基本类型和封装类型之间的转换。但是,这种操作也会影响程序的性能,因此在实际编程中需要注意它们的使用。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞