包装类的认识

前言~🥳🎉🎉🎉  

 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.mzph.cn/bicheng/1110.shtml

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

相关文章

Linux CPU火焰图

Linux CPU火焰图 1、火焰图简介 火焰图(Flame Graph)是一种强大的性的性能分析工具,专门用于可视化cpu时间消耗咋各个函数栈上的情况,可以很快帮助开发这识别程序中的性能瓶颈和热点函数,从而有效的进行程序优化&…

网络编程 -- 简易TCP网络程序

一 字符串回响 1.1 核心功能 字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。 1.2 程序结构 这个程序我们…

基于Zookeeper 简单实现分布式任务协调组件

优质博文:IT-BLOG-CN 一、什么是 Zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。 它是一个为分布式应用提供一致性服务的软件,提…

【管理】杨三角模型

企业成功 成功 战略 X 组织能力 1)组织能力对于企业的重要性是和战略一样的; 2)组织能力必须与战略适配,才能共同造就企业的成功。 员工思维:员工愿不愿意参与战略落地的实践?员工每天所关心、追求和重视的…

【C++】哈希封装map与set

目录 前言: 一,底层哈希结构 1-1,迭代器的封装 1-2,哈希表的封装 二,unordered_map的封装 三,unordered_set的封装 前言: 上一篇文章说明了哈希结构,这一篇文章来说明如何使用…

安装WSL2

PS C:\Users\pc> wsl --set-default-version 2 有关与 WSL 2 关键区别的信息,请访问 https://aka.ms/wsl2操作成功完成。PS C:\Users\pc> wsl --update 正在检查更新。 已安装最新版本的适用于 Linux 的 Windows 子系统。PS C:\Users\pc> wsl --shutdownPS…

PyTorch深度解析:Tensor——神经网络的核心构建块

在深度学习和神经网络的研究与应用中,Tensor(张量)无疑是一个核心概念。特别是在PyTorch这一强大的深度学习框架中,Tensor更是扮演了举足轻重的角色。本文将深入探讨PyTorch中的Tensor,从其基本定义、特性、操作到实际…

回溯算法练习day.3

39.组合总和 链接:. - 力扣(LeetCode) 题目描述: 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返…

uniapp Android 插件开发教程

一、下载uniapp提供的SDK Android 离线SDK - 正式版 | uni小程序SDK 二、在uniapp创建一个项目 查看包名:发行--> 原生app 云打包 三、进入dcloud官网 开发者中心 进入 应用管理 --> 我的应用 --> 点击应用名称-->各平台信息-->新增 这里需要这…

每日三个JAVA经典面试题(四十三)

1.如何在大数据环境下优化Java性能? 在大数据环境下优化Java性能涉及多个方面,包括调整JVM设置、代码优化和选择合适的工具和框架。以下是一些具体的优化建议: 调整JVM参数: 增加堆内存:通过调整-Xms(堆起…

SQLite FTS3 和 FTS4 扩展(三十二)

返回:SQLite—系列文章目录 上一篇:SQLite FTS5 扩展(三十) 下一篇:SQLite—系列文章目录 概述 FTS3 和 FTS4 是 SQLite 虚拟表模块,允许用户执行 对一组文档进行全文搜索。最常见(和最…

paddle.net怎么付款?paddle.net怎么订阅?

有需要的小伙伴可以使用Fomepay的卡进行订阅支付,我这里使用的是491090卡段,开卡步骤很简单,点击获取卡片 1、注册 2、填写姓名使用拼音或者英文名都可以 3、支付宝或者微信支付

【22.1】【22.2】【22.3】

【题解/标程】2022牛客寒假算法基础集训营 1 题解标程 【题解】2022牛客寒假算法基础集训营2 【题解】2022牛客寒假算法基础集训营3 九小时九个人九扇门 思路:数字根。知道后 f ( x y ) f ( f ( x ) f ( y ) ) f(xy)f(f(x)f(y)) f(xy)f(f(x)f(y)) &#xff…

● State Schema Evolution的平滑迁移策略

State Schema Evolution指的是在分布式系统或数据库中,随着业务需求的发展和变化,需要对存储的状态(如数据库表结构、数据模型等)进行升级或调整的过程。平滑迁移策略的目标是在不影响系统正常运行、尽量减少服务中断时间的前提下…

基于51单片机的数字万用表设计

基于51单片机的数字万用表设计 (仿真+程序+原理图PCB+设计报告) 功能介绍 具体功能: 1.能够切换测量电压、电流、电阻; 2.数码管实时显示测量值; 3.短路报警; 4.测量…

Vue.extend()和我的两米大砍刀

Vue.extends是什么&#xff1f; 一个全局API,用于注册并挂载组件。 传统的引用组件的方式是使用import直接引入&#xff0c;但是使用Vue.extends()也可以实现。 使用规则 <div id"mount-point"></div>// 创建构造器 var Profile Vue.extend({templat…

Spring 声明式事务控制

1. 编程式事务控制相关对象 1.1 PlatformTransactionManager PlatformTransactionManager 接口是 spring 的事务管理器&#xff0c;它提供了我们常用的操作事务的方法。 PlatformTransactionManager 是接口类型&#xff0c;不同的 Dao 层技术则有不同的实现类。例如:Dao层技…

Kibana启动报错:Kibana server is not ready yet

Kibana启动后&#xff0c;访问http://ip:5601后报错&#xff1a;Kibana server is not ready yet 原因1&#xff1a;Kibana和Elasticsearch的版本不兼容 解决方案&#xff1a;保持版本一致 原因2&#xff1a;Elasticsearch的服务地址和Kibana中配置的elasticsearch.hosts不同…

【数据结构】插值排序

插值排序&#xff08;Interpolation Search&#xff09;是一种用于在有序数组中查找特定元素的搜索算法。它是二分查找算法的改进版本&#xff0c;通过使用当前查找值与数组中值的比例来估计下一次查找的位置&#xff0c;而不是简单地取中点。 算法步骤 在开始搜索之前&#…