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

相关文章

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

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

以后写代码都是AI自动写了,Cursor+Claude-3.5-Sonnet,Karpathy 点赞的 AI 代码神器。如何使用详细教程

Cursor 情况简介 AI 大神 Andrej Karpathy 都被震惊了!他最近在试用 VS Code Cursor +Claude Sonnet 3.5,结果发现这玩意儿比 GitHub Copilot 还好用! Cursor 在短短时间内迅速成为程序员群体的顶流神器,其背后的原因在于其默认使用 OpenAI 投资的 Claude-3.5-Sonnet 模型,这一举动不仅改变了代码生成

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

Jenkins自动构建部署项目

1. 楔子 在实际开发中,经常需要编译、静态代码检查、自动化测试、打包、部署、启动等一连串重复机械的动作,浪费时间、而且容易出错,而Jenkins就是专门Continuous integration(CI)/ Continuous Deploy(CD)开源工具,本文简单介绍Jenkins的使用。 在线无安装免费试用Jenkins:http://www.jenkins.org.cn/test

【C#】装箱拆箱操作

1. 装箱 int num = 10;object obj = num; //装箱操作,将整数转换为对象 2. 拆箱 object obj = 10; //装箱操作,将整数转换为对象int num = (int)obj; //拆箱操作,将对象转换为整数 3. 本质 栈数据和堆数据的相互转移引用数据和值数据的相互转换