包装类、自动装箱、自动拆箱是什么?有哪些注意点?

1、包装类

Java中的数据类型总体上分为基本数据类型和引用数据类型。引用类型的数据可以通过对象的属性和方法来进行操作,但对于基本数据类型的数据,我们能不能像操作对象那样来操作呢?为了实现这个目标,Java为8种基本数据类型分别设计了对应的类,这就是包装类(Wrapper Classes,外覆类,数据类型类)。因为这些包装类都是引用类型,所以我们就可以方便地操作这些数据的属性和方法了。包装类的设计主要是为了配合Java 5之后出现的泛型,在泛型的使用中,基本数据类型和泛型不能混用。比如我们想使用ArrayList、HashMap等集合时,这些集合都需要指明集合中数据的泛型,而这些集合容器的泛型都必须是Object类型,像int、double这些基本类型是不允许使用的,所以就需要包装类。包装类的类名,就是把基本类型的首字母变成大写,除了Integer和Character特殊一点。另外,Byte、Short、Integer、Long、Float、Double这六个类,都是Number的子类,它们具有一些共同的类型转换方法,方便我们进行类型之间的转换。具体如下图所示:

  •  基本数据类型的数据存储在栈中,而包装类型的对象存储在堆中,因此基本数据类型的操作比包装类型的操作更加高效。建议尽量使用基本数据类型,而不是对应的包装类型。

2、自动装箱

自动装箱是指 Java 编译器把基本数据类型自动转换为对应的包装类。例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 类型等。如果转换以相反的方式进行,则称为开箱。以下代码就是自动装箱的例子。

Character ch = 'a';

List<Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(i);  // 实际实现的是:li.add(Integer.valueOf(i));

3、自动拆箱

自动拆箱是指 Java 编译器把包装类自动转换为对应的基本数据类型。例如,将 Integer 类型转换为 int类型,将 Double 类型转换为double 类型等。以下代码就是自动拆箱的例子。

public static int sumEven(List<Integer> li) {
    int sum = 0;
    for (Integer i: li)
        if (i % 2 == 0)  //自动拆箱
            sum += i;  //自动拆箱
        return sum;
}
//上面代码实际实现的是
public static int sumEven(List<Integer> li) {
    int sum = 0;
    for (Integer i : li)
        if (i.intValue() % 2 == 0) //手动拆箱操作
            sum += i.intValue();  //手动拆箱操作
        return sum;
}

4、字符串与自动装箱

如果你在拼接字符串时涉及到数字或其他非字符串对象,那么Java会使用自动装箱将这些对象转换为字符串。所以在字符串拼接时,建议使用 StringBuilder 或 StringBuffer,而不是字符串连接符 “+”,以避免自动装箱导致的开销。 

int a = 10;  
String b = "World";  
String c = a + b; // 自动装箱:这里的a会被自动转换为它的字符串表示形式"10"

5、注意点 

自动装箱和拆箱对程序性能会有一定的影响,但也要具体情况具体分析。优化应该是有目的的,而不是盲目的。在大多数情况下,自动装箱和拆箱对程序性能的影响并不大。只有在你确定这是性能瓶颈时,才应该专注于优化这部分代码。其他情况下,稍加注意即可:

  • 使用包装类型的目的明确:尽量只在需要的时候使用包装类型,并明确它们的使用目的。尽量避免在不需要的情况下使用它们。
  • 使用原始类型:在已知变量类型的情况下,使用原始类型通常比使用包装类型更有效。
  • 避免不必要的自动装箱:尽量避免在循环或大量计算中自动装箱。如果可能,手动进行装箱操作,以减少不必要的开销。
  • 避免过度优化:在大多数情况下,自动装箱和拆箱对程序性能的影响并不大。过度优化可能会使代码变得难以阅读和维护。
  • 使用StringBuilder进行字符串拼接:当需要大量拼接字符串时,使用StringBuilder或StringBuffer通常比使用"+"运算符更高效。
  • 进行性能测试和分析:使用Java的性能分析工具(如JProfiler、VisualVM等)来监测和分析程序性能。通过这种方式,你可以确定自动装箱和其他开销较大的操作对程序性能的具体影响。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

axios1.5取消请求,中断请求的方法

给input的onchange绑定事件 引入axios,使用axios.CancelToken.source()创建标记 实例中,把cancelToken的值填上

群晖NAS:内网穿透、异地组网 frp

群晖NAS&#xff1a;内网穿透、异地组网 星空-远程访问&#xff08;推荐高速&#xff09; https://ip4.ink/ cpolar极点云&#xff08;简单易用&#xff09; https://www.cpolar.com/ 内网穿透矿神教程 https://imnks.com/4406.html 1、公网最好了&#xff0c;IPV4参考&…

在VM ware上安装ESXI,并ESXI上安装centos系统

在VM ware上安装ESXI&#xff0c;并ESXI上安装centos系统 文章目录 在VM ware上安装ESXI&#xff0c;并ESXI上安装centos系统1.ESXI8.0镜像下载&#xff1a;1.1. 下载ESXI镜像&#xff1a; 2.下载镜像后安装ESXI虚拟机2.1.创建虚拟机 3.开启ESXI的虚拟机开启安装ESXI操作系统4.…

深度学习 大数据 股票预测系统 - python lstm 计算机竞赛

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

SSL证书对于SEO优化的重要性

SEO是指通过优化网站的内容、结构和技术元素以提升其在搜索引擎结果页上的排名的过程。其中一个经常被忽视但对SEO效果产生深远影响的因素就是SSL证书。 SSL证书是一种数字证书&#xff0c;用于加密网站流量并验证网站身份。它有助于保护用户的敏感数据&#xff0c;并在访问者和…

【算法练习Day47】两个字符串的删除操作编辑距离

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 两个字符串的删除操作编辑距…

一款好用的jpeg分析软件 JPEGsnoop

最近解码器解码jpeg的时候出了问题&#xff0c;为了追踪问题&#xff0c;找到了这款免费好用的jpeg分析软件- JPEGsnoop。 顶礼膜拜。 贴上链接地址&#xff1a; https://github.com/ImpulseAdventure/JPEGsnoop/releases 上面已经有编译好的win10 exe了 下载后解压&#x…

个微协议开发/微信个人号二次开发/ipad协议/api接口

E云管家&#xff0c;是完整的第三方服务平台&#xff0c;并基于IPAD协议8.0.37开发出的最新个微API服务框架。 你可以 通过API 实现 个性化微信功能 &#xff08;例云发单助手、社群小助手、客服系统、机器人等&#xff09;&#xff0c;用来自动管理微信消息。用户仅可一次对接…

解锁海外网红营销的潜力:关于KOC合作的7大建议

随着社交媒体的崛起&#xff0c;海外网红营销已成为全球各行业的主要趋势之一。传统的广告渠道逐渐被社交媒体平台和网红吸引了大量的广告投放&#xff0c;因此企业需要不断创新&#xff0c;以吸引受众并保持竞争力。其中&#xff0c;KOC合作是一个备受关注的策略&#xff0c;它…

运行程序报错 system/bin/linker: No such file or direct

使用CLion写了一个测试程序&#xff0c; cmake 编译完成后 &#xff0c; ./test 运行程序报错system/bin/linker: No such file or direct 解决 修改编译链接工具链 重新编译后运行正常

mac配置双网卡 mac同时使用内网和外网

在公司办公通常都会连内网&#xff0c;而连内网最大的限制就是不可以使用外网&#xff0c;那遇到问题也就不能google&#xff0c;而当连接无线的时候&#xff0c;内网的东西就不可以访问&#xff0c;也就不能正常办公&#xff0c;对于我这种小白来说&#xff0c;工作中遇到的问…

V-Ray效果图渲染出的画面发黄显脏?三种快速解决材质溢色的办法

小伙伴们在制作效果图时&#xff0c;有时候会遇到场景整体发黄&#xff0c;画面显脏不干净的情况。其实造成这种情况的原因之一就是出现了材质溢色问题&#xff0c;即饱和度高的材质对饱和度低的材质产生溢色&#xff0c;渲染出来的效果图会出现失真现象。 这个时候千万别用覆盖…

JDK 17 安装过程 Windows10

官网下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17 选择JDK17&#xff0c;并选择Windows版本&#xff0c;点击x64 Installer的下载链接。 下载要是有问题可以从笔者网盘自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1tvT2-l…

macOS文本编辑器 BBEdit 最新 for mac

BBEdit是一款功能强大的文本编辑器&#xff0c;适用于Mac操作系统。它由Bare Bones Software开发&#xff0c;旨在为开发者和写作人员提供专业级的文本编辑工具。 以下是BBEdit的一些主要特点和功能&#xff1a; 多语言支持&#xff1a;BBEdit支持多种编程语言和标记语言&…

【正点原子STM32连载】 第五十二章 图片显示实验摘自【正点原子】APM32F407最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html## 第五…

如何为VM虚拟机添加D盘

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 前言 在虚拟机上安装Windows10 系统后&…

【C语法学习】23 - strlen()函数

文章目录 1 函数原型2 参数3 返回值4 示例4.1 示例1 1 函数原型 strlen()&#xff1a;计算指针str所指向的字符串的长度&#xff0c;函数原型如下&#xff1a; size_t strlen(const char *str);2 参数 strlen()函数只有一个参数str&#xff1a; 参数str是指向待计算长度的字…

拟液态加载器

效果展示 CSS 知识点 SVG 的 feGaussianBlur、feColorMatrix 属性运用animation 属性运用filter 联合 SVG 使用 整体页面结构 <div class"container"><h2>Milk</h2><!-- 加载器的圆点部分 --><div class"loader"><spa…

PostGIS学习教程二:PostGIS安装和创建空间数据库

一、安装PostgreSQL 在安装PostGIS前首先必须安装PostgreSQL&#xff0c;然后在安装好的Stack Builder中选择安装PostGIS组件。 PostgreSQL安装文件下载地址是https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 这里使用的PostgreSQL版本是9.6。 双击…

微信个人号二次开发之检测好友

简要描述&#xff1a; 检测好友状态 请求URL&#xff1a; http://域名地址/userPrivacySettings 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选…