自动装箱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

相关文章

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e