自动装箱VS自定拆箱

2024-05-03 20:52
文章标签 vs 自动 装箱 拆箱 自定

本文主要是介绍自动装箱VS自定拆箱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:

在Java中,自动装箱(Autoboxing)和自动拆箱(Autounboxing)是Java 5引入的一项特性,用于在基本数据类型和它们的包装类(wrapper classes)之间进行自动转换。这允许程序员在编写代码时更自然地处理基本数据类型和对象类型,而不需要显式地创建包装类的实例或进行类型转换。

1.自动装箱(Autoboxing)

自动装箱是指将基本数据类型自动转换为对应的包装类实例。例如,当你将一个int值赋给一个Integer对象时,Java会自动将int值装箱为Integer对象。

Integer i = 10; // 自动装箱,相当于 Integer i = Integer.valueOf(10);

 

在上面的代码中,虽然我们将一个基本类型int的值(即10)赋给了一个Integer对象i,但Java编译器会自动进行装箱操作,调用Integer.valueOf(int)方法来创建一个Integer对象。

2.自动拆箱(Autounboxing)

自动拆箱是指将包装类实例自动转换为对应的基本数据类型。例如,当你从一个Integer对象中获取int值时,Java会自动拆箱。

Integer i = 10; int j = i; // 自动拆箱,相当于 int j = i.intValue();

在上面的代码中,我们从一个Integer对象i中获取了一个int值,并将其赋给了基本类型变量j。Java编译器会自动进行拆箱操作,调用Integer对象的intValue()方法来获取int值。

注意事项

  1. 空指针异常:由于自动拆箱涉及到对包装类实例的调用,如果包装类实例为null,那么在自动拆箱时将会抛出NullPointerException。
    Integer i = null; 
    int j = i; // 抛出 NullPointerException,因为i是null

  2. 性能:虽然自动装箱和拆箱使得代码更加简洁,但它们并不是无代价的。包装类和基本数据类型之间的转换需要额外的内存分配和垃圾回收开销。因此,在性能敏感的代码中,应尽量避免不必要的自动装箱和拆箱操作。
  3. 缓存:对于Byte、Short、Integer、Long、Character、Boolean和Float(不包括Double和Void)这些包装类,Java提供了缓存机制来存储一些常用值(通常是-128到127之间的Byte、Short和Integer值,以及Boolean的true和false)。当自动装箱这些范围内的值时,Java会返回缓存中的对象,而不是创建新的对象。这有助于提高性能和减少内存使用。但是,超出这个范围的自动装箱操作仍然会创建新的对象。

这篇关于自动装箱VS自定拆箱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/957626

相关文章

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Flask 验证码自动生成的实现示例

《Flask验证码自动生成的实现示例》本文主要介绍了Flask验证码自动生成的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 目录生成图片以及结果处理验证码蓝图html页面展示想必验证码大家都有所了解,但是可以自己定义图片验证码

Python Excel实现自动添加编号

《PythonExcel实现自动添加编号》这篇文章主要为大家详细介绍了如何使用Python在Excel中实现自动添加编号效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍简单的说,就是在Excel中有一列h=会有重复

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s