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

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

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

  我是一名后端开发爱好者,工作日常接触到最多的就是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中,自动拆箱是将封装类型的变量自动转换为基本类型的变量。自动拆箱是在编译器中自动完成的,不需要开发者手动进行。

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

Integer i = new Integer(10);
int j = i;

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

自动装箱

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

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

int i = 10;
Integer j = i;

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

应用场景案例

自动拆箱

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

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

自动装箱

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

  1. 自动装箱可以方便地将基本类型的变量转换为对应的封装类型,便于在面向对象的编程中使用。
int i = 10;
Integer j = i;
  1. 在调用泛型方法时,需要将基本类型的变量转换为对应的封装类型,以便能够使用集合类型。
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:

public class AutoBoxing {public static int autoUnboxing(Integer i) {return i;}public static Integer autoBoxing(int i) {return i;}
}

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

测试用例

测试代码演示

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

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 !!!


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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/843696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:进程控制(二.详细讲解进程程序替换)

上次讲了&#xff1a;Linux&#xff1a;进程地址空间、进程控制&#xff08;一.进程创建、进程终止、进程等待&#xff09; 文章目录 1.进程程序替换1.1概念1.2原理1.3使用一个exec 系列函数execl&#xff08;&#xff09;函数结论与细节 2.多进程时的程序替换3.其他几个exec系…

mysql连接池的实现

概要&#xff1a;本文介绍mysql连接池的实现&#xff0c;要求读者了解线程池 一、为什么需要mysql连接池&#xff1f; 资源复用 &#xff1a;不使用连接池&#xff0c;每次数据库请求都新建一条连接&#xff0c;将耗费系 统资源。 流程如下&#xff1a; 通过三次握手建立 TC…

大数据面试题 —— Hive

目录 Hive 是什么为什么要使用 HiveHive 的优缺点Hive的实现逻辑&#xff0c;为什么处理小表延迟比较高你可以说一下 HQL 转换为 MR 的任务流程吗 ***你可以说一下 hive 的元数据保存在哪里吗 ***Hive与传统数据库之间的区别Hive内部表和外部表的区别 ***hive 动态分区与静态分…

Hotcoin Research | 市场洞察:2024年5月13日-5月19日

加密货币市场表现 目前&#xff0c;加密货币总市值为1.32万亿&#xff0c;BTC占比54.41%。 本周行情呈现震荡上行的态势&#xff0c;BTC在5月15日-16日&#xff0c;有一波大的拉升&#xff0c;周末为震荡行情。BTC现价为67125美元。 上涨的主要原因&#xff1a;美国4月CPI为3…

效率工作:一键为多种资产添加统一材质(小插件)

1.需求分析&#xff1a; 当导入一批资产&#xff0c;或者有同一批结构体需要添加相同材质时&#xff0c;单独为每个模型都添加材质费时费力&#xff0c;有没有什么办法&#xff0c;能同时为多个资产添加材质。 2.操作实现 1.在网上找到了一款插件&#xff0c;经过验证&#xf…

如何将天猫内容保存为PDF格式?详细步骤与实战解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;保存天猫内容的重要性 二、环境准备与工具安装 1. 安装必要的Python包…

SpringCloud之SSO单点登录-基于Gateway和OAuth2的跨系统统一认证和鉴权详解

单点登录&#xff08;SSO&#xff09;是一种身份验证过程&#xff0c;允许用户通过一次登录访问多个系统。本文将深入解析单点登录的原理&#xff0c;并详细介绍如何在Spring Cloud环境中实现单点登录。通过具体的架构图和代码示例&#xff0c;我们将展示SSO的工作机制和优势&a…

HCIP-Datacom-ARST自选题库__BGP多选【22道题】

1.BGP认证可以防止非法路由器与BGP路由器建立邻居&#xff0c;BGP认证可以分为MD5认证和Keychain认证&#xff0c;请问以下哪些BGP报文会携带BCGP Keychain认证信息?(报头携带) open Update Notication Keepalive 2.传统的BGP-4只能管理IPv4单播路由信息&#xff0c;MP-B…

Spring-Cloud-OpenFeign源码解析-04-调用流程分析

在Spring-Cloud-OpenFeign源码解析-03-FeignClientFactoryBean分析到&#xff0c;通过Autowired或者Resource注入FeignClient实例的时候&#xff0c;实际上返回的是JDK动态代理对象&#xff0c;具体的实现逻辑在InvocationHandler的invoke方法中 回看ReflectiveFeign.newInsta…

AI大模型日报#0528:Greg专访 | 为什么OpenAI最先做出GPT-4、xAI获60亿美元融资、李飞飞经典对话Hinton

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE 4.0&#xff09;、“零一万物”&#xff08;Yi-34B&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff0…

YOLOv8/YOLOv7/YOLOv5+CRNN-车牌识别、车牌关键点定位、车牌检测(毕业设计)

目录 一、前言1、项目介绍2、图片测试效果展示 二、项目环境配置1、pytorch安装&#xff08;gpu版本和cpu版本的安装)2、pycocotools的安装3、其他包的安装 三、yolov8/yolov7/yolov5CRNN-中文车牌识别、车牌关键点定位、车牌检测算法1、yolov8算法介绍2、CRNN算法介绍3、算法流…

【加密与解密(第四版)】第十三章笔记

第十三章 HOOK技术 13.1 Hook概述 IAT HOOK&#xff08;改地址&#xff09; BOOL IAT_InstallHook(){BOOL bResult FALSE ;HMODULE hCurExe GetModuleHandle(NULL);PULONG_PTR pt ;ULONG_PTR OrginalAddr;bResult InstallModuleIATHook(hCurExe,"user32.dll",&qu…

韩顺平0基础学Java——第13天

p264-p284 安装IDEA&#xff0c;熟悉一下软件。 尴尬了&#xff0c;难道是这个版本的idea不支持jdk17&#xff0c;难受住了 成功了&#xff0c;顺便跑一下昨天的作业&#xff1a; 这都要跑2秒&#xff1f;是电脑的问题还是谁的问题&#xff1f;控制台里跑的好快的哦 设置id…

Thingsboard规则链:Message type switch节点详解

在物联网解决方案中&#xff0c;数据的高效处理与自动化决策流程是实现智能化管理的基础。Thingsboard&#xff0c;作为一个强大的开源物联网平台&#xff0c;通过其规则引擎为用户提供了一系列灵活的节点来定制复杂的业务逻辑。其中&#xff0c;Message Type Switch节点是构建…

BookxNote Pro 宝藏 PDF 笔记软件

一、简介 1、BookxNote Pro 是一款专为电子书阅读和学习笔记设计的软件&#xff0c;支持多种电子书格式&#xff0c;如PDF和EPUB&#xff0c;能够帮助用户高效地管理和阅读电子书籍&#xff0c;同时具备强大的笔记功能&#xff0c;允许用户对书籍内容进行标注、摘录和思维导图绘…

Springboot启动时报错Property ‘mapperLocations‘ was not specified.

这几天没整boot 晚上直接运行不了了 本想是在表现层写点代码测测接口的 localhost8080找半天 结果404 先考虑好久 是不是url输入错了 然后 就发现 结果boot都不能启动了 JUnit也测不出来 找了半天 结果是开关机导致数据库没开 手动打开服务 找到MySQL启动 IDEA连接数据…

ssm/springoot养老院问诊服务预约系统_96316老年人服务系统

2.管理员&#xff1a; &#xff08;1&#xff09;登入注册页面&#xff1a;管理员进行操作时需要是已注册登入的 &#xff08;2&#xff09;权限管理&#xff1a;管理员登入后可以运用权限进行相应的操作管理。 &#xff08;3&#xff09;用户管理&#xff1a;对用户进行删除、…

国产数据库替代加速 助力数字中国建设

5月24日&#xff0c;随着第七届数字中国建设峰会在福州的成功举办&#xff0c;释放数据要素价值、发展新质生产力成为当下热议的话题。 数据作为新型生产要素&#xff0c;是数字化、网络化、智能化的重要基础。北京人大金仓信息技术股份有限公司&#xff08;以下简称人大金仓&a…

OpenHarmony实战开发——宿舍全屋智能开发指南

项目说明 基于OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;、数字管家开发宿舍全屋智能&#xff0c;实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似&#xff0c;本文主要以碰一碰开门为例介绍如何在现有OpenHar…

西储大学数据集学习

数据集下载地址&#xff1a;CWRU凯斯西储大学轴承数据数据集——附&#xff1a;下载链接_西储大学轴承数据集下载-CSDN博客 最近研究故障诊断&#xff0c;先对使用比较多的西储大学数据集研究。以资料【1】中的内容展开研究。 1、轴承的结构 轴承分为外圈、内圈、保持架和滚珠…