包装类的认识

前言~🥳🎉🎉🎉  

 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.hqwc.cn/news/626541.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序实现前端热更新的基础技术原理

小程序技术是一种很有前景的移动开发技术,尤其在移动App开发中,高频业务场景的热更新方向上。 时间来到了2024年,小程序的技术已经作为企业构建超级App的一种快速迭代业务场景,或者便捷引入第三方生态的技术“利器”,…

每日两题1

文章目录 使用最小花费爬楼梯91解码方法 使用最小花费爬楼梯 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() 2)return min(cost[0],cost[1]);vector<int> dp;dp.reserve(cost.size()1);dp[0] 0;dp[1] 0;for(int i…

书生·浦语大模型全链路开源体系-第4课

书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…

【MySQL数据库】 (篇一 ) 让你快速上手——新手速通版

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、如何起步&#xff1f;&#x1f3c3;‍1.创建数据库&#xff1a;2.选择数据库&#xff1a;3.删除数据库&#xff1a;4.创建表&#xff1a;5.删除表&#xff…

冒泡排序的时间复杂度的讲解

冒泡排序代码&#xff1a; 冒泡排序的时间复杂度&#xff1a; 最坏情况&#xff1a; 遍历了n-1&#xff0c;n-2&#xff0c;n-3......才让数字来到该处于的位置&#xff0c;而这是一个等差数列&#xff08;n-1&#xff0c;n-2&#xff0c;n-3......&#xff09;&#xff0c;该数…

四川教育装备行业协会考察团走访云轴科技ZStack共话技术创新应用

近日&#xff0c;四川省教育装备行业协会高等教育技术专业委员会组织了一次深入的考察活动&#xff0c;旨在加强与其他省市高校及企业之间的交流与合作&#xff0c;学习借鉴先进的教育装备与管理经验&#xff0c;以提升本省的高等教育技术水平。考察团一行先后走访了武汉理工大…

2024-6.python流程控制

流程控制 流程控制指的是代码运行逻辑、分支走向、循环控制&#xff0c;是真正体现程序执行顺序的操作。 程序是由语句构成&#xff0c;而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑以及更强大的功能。几乎所有编程语言都有流程…

Nacos源码分析,Nacos gRPC服务端设计

作为SpringCloudAlibaba微服务架构实战派上下册和RocketMQ消息中间件实战派上下册的作者&#xff0c;我来给大家分析一下Nacos的源码。 Nacos支持采用gRPC作为通信渠道&#xff0c;并且针对Nacos集群之间的通信以及客户端和Nacos服务端之间的通信&#xff0c;同时启动了两个相…

Spring (四) 之配置及配置文件的操作

文章目录 1、Spring 基于注解的配置基于注解的配置引入依赖包配置实体类数据访问层业务层业务层实现测试 2、Bean和Component和Configuration的区别1 Bean:2 Component:3 Configuration:总结&#xff1a; 区别Component和Configuration区别 3、Spring读取properties配置文件准备…

使用 strace 进行调试

strace 是可用于调试任何正在运行的程序的最佳工具之一。在我们深入之前&#xff0c;您需要熟悉系统调用。熟悉它们非常重要&#xff0c;因为 strace 公开了程序正在使用的系统调用。因此&#xff0c;在介绍 strace 之前&#xff0c;先介绍一些常见的系统调用。 系统调用是“应…

C++语言·类和对象

1. 类的引入 C语言结构体中只能定义变量&#xff0c;但在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数&#xff0c;同时C中struct的名称就可以代表类型&#xff0c;不用像C那样为了方便还要typedef一下。 在C中我们管定义的结构体类型叫做类(student)&a…

HDLbits 刷题 -- Mux256to1

Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel0 should select in[0], sel1 selects bits in[1], sel2 selects bits in[2], etc. Expected solution length: Around 1 line. 译&#xff1a; 创建一个…