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

news2024/9/22 13:43:16

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等)来监测和分析程序性能。通过这种方式,你可以确定自动装箱和其他开销较大的操作对程序性能的具体影响。

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

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

相关文章

SMART PLC编码器转速测量功能块(高速计数器配置+梯形图)

SMART PLC高速计数器测量请查看下面文章链接: 西门子SMART PLC高速脉冲计数采集编码器速度(RC滤波)-CSDN博客文章浏览阅读2.5k次。这篇文章主要讲解西门子 SMART PLC高速计数采集编码器脉冲信号计算速度,根据编码器脉冲数计算速度的原理和注意事项在其它文章里已经有非常详细…

从替代走向引领,永洪科技迈向全球化

对于数据分析领域而言&#xff0c;这是一个最好的时代。 《全球数字经济白皮书&#xff08;2023年&#xff09;》介绍&#xff0c;2016年-2022年&#xff0c;中国数字经济年均复合增长率为14.2%&#xff0c;数字经济发展增速和规模兼具。随着数字基础实施持续夯实、数字应用不…

常见面试题-双亲委派模型

双亲委派模型 class 文件是通过 类加载器 装在到 JVM 中的&#xff0c;为了防止内存中存在多份同样的字节码&#xff0c;使用了双亲委派模型 双亲委派模型对于保证 Java 程序的稳定运行至关重要 双亲委派模型的原理为&#xff1a; &#xff08;1&#xff09;如果一个类加载…

淘宝店铺订单插旗接口(taobao.trade.memo.update淘宝店铺订单交易备注修改接口)

淘宝店铺订单插旗接口是指可以在淘宝店铺的订单系统中进行订单备注的接口。通过该接口&#xff0c;您可以根据用户的身份&#xff08;买家或卖家&#xff09;&#xff0c;添加相应的交易备注&#xff0c;用于区分不同订单类型等。 具体使用方法可以参考淘宝开放平台的API接口文…

欧洲大学专场黑客松,获奖者们在Sui上构建链上物品验证并改进荷兰拍卖

在由区块链学生协会&#xff08;Blockchain Student Association&#xff09;与Sui合作的黑客松上&#xff0c;获奖者们构建了旨在吸引新用户并弥合区块链技术与实物资产之间差距的项目。这些新项目展示了Sui的发展前景和灵活性&#xff0c;以及它如何解决现实世界的问题。 来…

深度学习 大数据 股票预测系统 - 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;今天…

Linux常用的压缩命令

笑小枫的专属目录 少整花活&#xff0c;直接干货Linux gzip命令语法功能参数 Linux zip命令语法参数 少整花活&#xff0c;直接干货 本文的来源就是因为上篇文章Linux常用的解压命令&#xff0c;解压整了&#xff0c;顺手整理了一波压缩命令。 Linux gzip命令 减少文件大小有…

Linux常用的解压命令

笑小枫的专属目录 整啥幺蛾子Linux tar命令tar命令的参数范例 Linux unzip命令语法参数 整啥幺蛾子 今天在linux解压一个文件&#xff0c;顺手就来tar -zxvf xxxx &#xff0c;哦吼&#xff0c;爆竿了&#xff0c;套他猴子的。 好吧&#xff0c;承认 .gz文件解压多了&#xff…

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

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

9.25 广读论文 思想汇总

数据集MIMIC-VI Learning Patient Static Information from Time-series EHR and an Approach for Safeguarding Privacy and Fairness The dataset analyzed in this study can be found in https://physionet.org/content/mimiciv/2.2/ and https://eicu-crd.mit.edu/about/…

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

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

如何获取1688商品详情,价格,图片

1688是阿里巴巴旗下的B2B电子商务平台&#xff0c;主要面向国内的生产商和批发商。 通过获取到的跨境属性数据&#xff0c;可以了解到商品的跨境属性&#xff0c;例如商品的语言、原产地、适用场景等信息。这些数据可以帮助用户更好地了解商品的特点和质量&#xff0c;做出更明…

在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.…

眼镜店展示预约小程序的作用是什么

电子产品深入人们生活以及用眼习惯不好&#xff0c;我国各年龄阶段近视率不低&#xff0c;眼镜店的需求很高&#xff0c;太阳镜、远近视镜等每天都有客户前往验光或配镜等。对眼镜店来说&#xff0c;除了承接线下流量外&#xff0c;还需要外部不断拓展客户&#xff0c;增加营收…

idea 插件推荐第二期

文章目录 便捷开发CodeGlance Pro (代码缩略图)GenerateAllSetter&#xff08;快速生成对象所有set方法&#xff09;GsonFormatPlus&#xff1a;json转实体RestfulToolkitX&#xff08;找到controller快捷请求接口&#xff09; 美化activate-power-mode-x (敲击计数、动效)Nyan…

Sui主网升级至V1.13.0版本

Sui主网现已升级至V1.13.0版本&#xff0c;同时Sui协议升级至30版本。其他升级要点如下所示&#xff1a; #14348 在运行Prover时&#xff0c;现在会打印有关Sui当前Move Prover支持水平的警告。 #13639 加强验证节点保护机制&#xff0c;防止在以下情况发生时接受交易&…

centos7通过pip3在线下载python3第三方依赖包

更新pip pip3 install --upgrade pip安装requests ​ pip3 install requests -i https://pypi.doubanio.com/simple ​ 安装路径&#xff1a; /usr/local/lib/python3.6/site-packages 安装paho-mqtt ​ pip3 install paho-mqtt -i https://pypi.doubanio.com/simple ​ 安装…

Swift--基本运算符与程序流程控制

系列文章目录 第一章&#xff1a;量值与基本数据类型 第二章&#xff1a;字符、字符串与集合类型 文章目录 系列文章目录空合并运算符区间运算符循环结构while与repeat-while条件循环结构 空合并运算符 可选值类型是Swift语言的一个独特之处&#xff0c;空合并运算符就是针对…

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

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

得帆低代码OMS助力SAP和Oracle ERP订单模块全线升级,感受非凡体验

场景背景 随着数字化转型进入深水区&#xff0c;智能化、移动化、可视化的需求越来越强烈&#xff0c;而传统的Oracle、SAP销售模块很难快速满足销售端的上述需求&#xff0c;逐渐面临如下痛难点&#xff1a; IT服务商响应不足&#xff1a;企业越来越多信息化的业务需要大量的供…