包装类的认识

news/2024/11/15 8:29:51/

前言~🥳🎉🎉🎉  

 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍 

💥个人主页:E绵绵的博客
💥所属专栏:JAVA知识点专栏   JAVA题目练习  c语言知识点专栏   c语言题目练习

我们在java最开始学习时就提过包装类这个概念,不过由于当时我们学习较浅,还不清楚这是什么。到了现在学习数据结构时,有很多知识要用到包装类,所以我们在这就重点讲一下包装类。开始出发吧!

包装类的概念 

❤️❤️在Java中,由于基本类型不是继承自Object(基本类型不是类,所以不继承),为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。

基本数据类型和对应的包装类 

❤️❤️除了 Integer和Character, 其余基本类型的包装类都是首字母大写。

装箱和拆箱 

❤️❤️对于装箱和拆箱我们就拿Integer来举例,其他的包装类所用的方法都是跟Integer一样的 

装箱 

int i = 10;// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);​

❤️❤️这两种操作都属于装箱操作,对于valueOf其内部含有new ,我们可以看下valueof源码:

拆箱 

int i = 10;// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i); 
// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();

💥💥将Integer拆箱成整数我们是用intvalue这个方法去操作,对于Double,Boolean等包装类将其拆箱成对应基本类型都有各自对应的方法如doublevalue和booleanvalue。

当然我们还可以将integer拆箱成浮点数,就是用doublevalue方法去操作,这里还有很多其他方法能将integer拆箱成其他类型。(其他包装类也是类似的)

下面我们看下Integer内部的doublevalue和intvalue代码:

自动装箱和自动拆箱 

❤️❤️可以看到在使用过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,java 提供了自动机制。

自动装箱 

❤️❤️自动装箱的实现是通过Java编译器在编译时进行的。当我们将一个基本数据类型赋值给对应的包装类对象时,编译器会自动调用该包装类的valueOf()方法来进行装箱操作,无需手动使用(注意是valueOf方法) 例如,将一个int类型的值赋给Integer对象时,编译器会自动调用Integer.valueOf()方法进行装箱。 

Integer num = 10; // 自动装箱

自动拆箱 

❤️❤️自动拆箱(Autoboxing)是指当我们将一个包装类对象赋值给一个基本数据类型变量时,编译器会自动进行拆箱操作,自动调用对应的方法来将包装类对象转换为基本数据类型,无需我们手动使用该方法。例如,我们可以直接将一个Integer对象赋值给int类型的变量,而不需要显式地调用intValue()方法进行转换。

Integer num = 10; 
int value = num; // 自动拆箱

❤️❤️我们看下自动装箱和自动拆箱汇编后的字节码

 分析上图可以得出其的确自动调用了valueOf和intvalueof方法。

🎯🎯经典题目

​
public static void main(String[] args) {Integer a = 127;Integer b = 127;Integer c = 128;Integer d = 128;System.out.println(a == b);//输出trueSystem.out.println(c == d);//输出false
}​

🎯​​​​​​​🎯上述代码为什么输出如上结果。

这是因为自动装箱会自动调用valueof方法,用它来创建包装类。这时候我们就该看下valueof内部的源码(前面就展示过)

由上述代码可知127在-128到127中,所以返回的是Integer数组里的一个Interger包装类,因为他们都是127,所以返回了相同的包装类(地址一样),所以是相等的,返回true。

而对于128不在该范围内,所以自己就单独new了一个对象,这两个因为都是128,所以就单独new了两个对象,将其用==比较,因为它们地址不同所以返回false。

所以这就是输出该结果的原因。

 总结

所以我们的包装类就结束啦,之后将给大家介绍泛型。还希望各位大佬们能给个三连,点点关注,点点赞,发发评论呀,感谢各位大佬~❤️❤️💕💕🥳🎉🎉🎉


http://www.ppmy.cn/news/1426564.html

相关文章

PostgreSQL 窗口函数汇总

文章目录 前言一、什么是窗口函数?二、常用的4类窗口函数三、PARTITION BY 子句四、窗口函数示例1. 聚合计算1.1 sum() 函数1.2 count() 函数1.3 avg() 函数2. 分组排序2.1 row_number() 函数2.2 rank() 函数2.3 dense_rank() 函数3. 分组查询

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码:ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

安全开发实战(1)--Cdn

目录 安全开发专栏 CDN介绍 1.信息收集阶段 1.1判断CDN是否存在 1.1.1, One 1.1.2,Two(改进) 1.1.3,进行整合 增加输入功能 1.1.4 批量读取监测存储(进行测试) 问题1: 问题2: 解决方案: 1.1.4 基本编写完成 命令框中: cdn存在.txt 总结 这里我是根据整个渗透测…

React官网力荐Next.js:为何它取代了Create-React-App?

随着前端技术的快速发展,React作为一款领先的JavaScript库,不断推动着前端开发的变革。近期,React官网的一个显著变化引起了广大开发者的关注:它不再推荐使用Create-React-App作为构建React应用的默认工具,而是转向了N…

第十二章:掌握kubectl常用命令

kubectl常用命令 目标 掌握kubectl常用命令掌握kubectl资源查看、创建、更新、删除、清理以及调试交互等常用命令kubectl 是什么 kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互和管理。kubectl 允许用户执行各种操作,如创建、删除、更新和查看 Kuber…

人工智能大模型培训老师叶梓:图模型数据处理的应用探索

图模型作为人工智能领域的关键技术之一,在社交网络分析、生物信息学、推荐系统等多个领域展现出其独特的数据处理能力。随着图计算技术的不断进步,图查询算法、图机器学习、图数据库等方向的发展尤为迅猛。 图查询算法的进展 图查询算法是图数据管理系…

和尚都念数字经了,你还做不好数字化?

灵隐寺介绍 杭州灵隐寺一位高僧讲解数字化管理系统的照片引发了网友的极大兴趣。寺庙这一传统场所似乎也被数字化浪潮所触及。灵隐寺的数字化管理系统覆盖了游客统计、日接待量、防疫管控、安全预警等多方面业务,展现了其全面的智慧管理。 佛门智者 高僧们早已在参悟…

面试被问懵了:手撕 Transformer

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今年最大…