自动拆箱与装箱

自动拆箱与装箱

    • 先进行专栏介绍
      • 自动拆箱与装箱是Java语言中一个重要的特性,它们在编程过程中起着至关重要的作用。本文将深入探讨自动拆箱与装箱的原理和相关细节。
      • 概念
        • 基本概念
        • 分析
      • 原理
        • 自动拆箱的原理
        • 自动装箱的原理
        • 总结
      • 注意事项
      • 代码示例

先进行专栏介绍

本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记
进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行建议,互相学习。
在这里插入图片描述

自动拆箱与装箱是Java语言中一个重要的特性,它们在编程过程中起着至关重要的作用。本文将深入探讨自动拆箱与装箱的原理和相关细节。

概念

基本概念

装箱:把基本数据类型转换为对应的包装类类型
拆箱:把包装类类型转换为对应的基本数据类型

分析

在Java中,基本数据类型(如int、char、boolean等)是非对象的,而引用数据类型(如Integer、Character、Boolean等)是对象。拆箱是将包装类型对象转换为基本数据类型的过程,而装箱则是将基本数据类型转换为包装类型对象的过程。自动拆箱与装箱是指在需要的时候,Java编译器会自动地进行这些转换,使得我们在编程过程中更加方便地使用基本数据类型和引用数据类型。
在这里插入图片描述

原理

自动拆箱的原理

通过调用包装类型对象的xxxValue()方法将其转换为相应的基本数据类型。例如,当我们将一个Integer对象赋值给一个int类型的变量时,编译器会自动调用Integer对象的intValue()方法,将其转换为int类型。这样,我们就可以直接使用基本数据类型进行运算和比较,而无需手动进行类型转换。

自动装箱的原理

通过调用包装类型的valueOf()方法将基本数据类型转换为包装类型对象。例如,当我们将一个int类型的变量赋值给一个Integer对象时,编译器会自动调用Integer类的valueOf()方法,将int类型转换为Integer对象。这样,我们就可以将基本数据类型作为对象进行操作,享受到对象的各种方法和特性。

总结

自动装箱和拆箱的原理是由Java编译器在编译时进行处理的,编译器会根据上下文自动插入装箱和拆箱的代码,使得程序员可以直接使用基本类型和包装类型,而不需要手动进行类型转换。这种机制可以简化代码的编写,提高代码的可读性和可维护性。此外,自动拆箱与装箱还有助于避免一些常见的编程错误,如类型不匹配等。
在这里插入图片描述

注意事项

1、性能损耗:自动装箱和拆箱会引入额外的性能损耗,因为需要进行对象的创建和销毁。在性能敏感的场景下,尽量避免频繁的装箱和拆箱操作。

2、空指针异常:在拆箱操作时,如果装箱对象为null,则会抛出空指针异常。因此,在进行拆箱操作之前,需要先进行null的判断。

3、对象比较:自动装箱会导致对象的创建,因此在比较两个装箱类型的值时,应使用equals()方法进行比较,而不是使用 == 运算符。因为 == 运算符比较的是对象的引用,而不是对象的值。

4、缓存对象:在装箱操作时,Java对于某些范围内的整数和字符类型进行了缓存,可以直接使用缓存对象,而不需要创建新的对象。例如,对于整数类型,范围在-128到127之间的整数会被缓存,可以直接使用Integer.valueOf()方法获取缓存对象。

5、不可变性:包装类型是不可变的,即一旦创建,其值不能被修改。如果需要修改值,需要创建一个新的包装对象。

代码示例

public class crj {
    public static void main(String[] args) {
        //装箱
//        Integer i=Integer.valueOf(100);
        //自动装箱
        Integer ii = 100;
        //自动拆箱
        ii+=200;  //ii==ii.intValue()+200
        System.out.println(ii);
    }
}

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

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

相关文章

Synchronized同步锁的优化方法 待完工

Synchronized 和后来出的这个lock锁的区别 在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。在 JDK1.5 之前,Java 是依靠 Synchronized 关键字实现锁功能来做到这点的。Synchronized 是 JVM 实现的一种内置锁…

奥威BI系统:零编程建模、开发报表,提升决策速度

奥威BI是一款非常实用的、易用、高效的商业智能工具,可以帮助企业快速获取数据、分析数据、展示数据。值得特别注意的一点是奥威BI系统支持零编程建模、开发报表,是一款人人都能用的大数据分析系统,有助于全面提升企业的数据分析挖掘效率&…

java+springboot+mysql日程管理系统

项目介绍: 使用javaspringbootmysql开发的日程管理系统,系统包含超级管理员、管理员、用户角色,功能如下: 超级管理员:管理员管理;用户管理;反馈管理;系统公告;个人信息…

SpringCloud实用篇2——Nacos配置管理 Feign远程调用 Gateway服务网关

目录 1 Nacos配置管理1.1 统一配置管理1.1.1 在nacos中添加配置文件1.1.2 从微服务拉取配置 1.2 配置热更新1.2.1 方式一1.2.2 方式二(推荐) 1.3.配置共享 2 搭建Nacos集群2.1 集群结构图2.2 搭建集群2.2.1 初始化数据库2.2.2 下载nacos2.2.3 配置Nacos2…

UDS服务基础篇之31

UDS服务基础篇之31服务 前言 正如前文《UDS基础之2F服务》所说的2F服务与今天本文要将的31服务存在着有些相似之处,因此需要针对31服务本身进行较为细致的剖析,在此小T抛出如下几个基本问题供大家思考: 你知道31服务是干什么的吗&#xff…

vue 在方法里用字符串赋值图片路径获取不到,提示找不到图片

原因 直接通过字符串赋值命名路径是不会生效的,如 this.file1"../assets/addmodel/TAR.png" 因为在Vue模板中直接使用字符串赋值的方式不会被解析为正确的资源路径。 你可以使用动态绑定(v-bind 或简写为 :)来设置图片的路径。…

Redis性能瓶颈揭秘:如何优化大key问题?

1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。 到底多大的数据量才算是大key? 没有固定的判别标准,通常认为字符串类型的k…

在WebStorm中通过live-server插件搭建Ajax运行环境

1.下载node.js 官网: https://nodejs.cn/download/ 2.配置Node.js的HTTPS 使用淘宝的镜像: npm config set registry https://registry.npm.taobao.org 也可以使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 配置之后可以验证是否成…

SAP SD 交货单发货过账缺料提醒 改成 弹窗框清单提醒增强

场景:零件库下销售订单100来个行项目,产生的交货单也是100多个行项目,但因为库存做不准,不及时,以及本来就缺料,在交货单发货过账时会提醒,见下图 但是每次只提醒一个,零件库实际业务…

HCIP-linux知识

linux安装教程参考,https://blog.51cto.com/cloudcs/5245337 yum源配置 本地yum源配置: 8版本配置:将光盘iso挂载到某个目录,/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt,# ls /mnt AppStream B…

webpack基础知识十:与webpack类似的工具还有哪些?区别?

一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体(bundle) 在前端领域中,并非只有webpack这一款…

K8S系列文章之 Kind 部署K8S的 服务发布

安装kind 下载 https://github.com/kubernetes-sigs/kind/releases/download/0.17.0/kind-linux-amd64 执行以下命令: mv kind-linux-amd64 /usr/local/bin/kind chmod 777 /usr/local/bin/kind 之前需要先在本地主机安装好docker yum -y install yum-utils d…

微服务 云原生:基于 Gogs + Drone 进行项目 CI/CD

传统构建部署 以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。 一个简单的例子: 前端: 项目名:kubemanagement-web技术栈&am…

调整vscode

调整vscode 连wifi linux连接wifi

Git从远程仓库中删除文件,并上传新文件

目录 删除: 拉取远程分支的更新: ​编辑 首先查看git状态: ​编辑 删除文件并提交版本库: 提交: 上传新文件: 首先查看git状态: 提交到暂存区: 提交到版本库: 上…

HCL MPLS L2VPN BGP lsp

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 和路由协议 2.2 配置MPLS LDP 2.3 配置L2VPN PW(BGP) 2.4 验证L2VPN 使用EVE-NG 中 的H3C 镜像,配置bgp 后,OSPF 会失效,可能镜像有问题,使用HCL没有问题。 1 拓扑 2 配置步骤 2.1…

【MySQL】deepin安装mysql的cpp开发包

在deepin下安装好mysql后&#xff0c;发现在c语言中没有<mysql.h>的头文件。 而根据ubuntu的办法直接按照mysql的开发包&#xff0c;会出现这种情况&#xff1a; ~/Desktop$ sudo apt-get install libmysqlclient-dev 正在读取软件包列表… 完成 正在分析软件包的依赖关…

使用vscode远程登录以及本地使用的配置(插件推荐)

1、远程登陆ssh 1.1打开vscode插件商店&#xff0c;安装remote-ssh插件 远程ssh添加第三方插件&#xff1a;vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义&#xff0c;选中代码->鼠标右键->转到定义…

Leetcode周赛 | 2023-8-5

2023-8-5 题1体会我的代码 题2体会我的代码 题1 体会 一开始是觉得这道题是贪心的&#xff0c;选出现次数最多的元素&#xff0c;但是发现&#xff0c;当有多个元素出现次数均为最多时&#xff0c;似乎很难处理&#xff0c;就放弃了。转而问ChatGPT &#xff0c;结果让自己走上…

文字转语音

键盘获取文字&#xff0c;转化为语音后保存本地 from win32com.client import Dispatch from comtypes.client import CreateObject from comtypes.gen import SpeechLib speakerDispatch(SAPI.SpVoice) speaker.Speak(请输入你想转化的文字) datainput(请输入&#xff1a;)#s…