包装类的认识

前言~🥳🎉🎉🎉  

 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);//输出true
    System.out.println(c == d);//输出false
}

​

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

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

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

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

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

 总结

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

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

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

相关文章

48.基于SpringBoot + Vue实现的前后端分离-雪具销售系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的雪具销售系统设计与实现管理工作系统…

探索分布式系统监控zabbix-------------监控Windows

扩展windows 10 server2012 server2016 server2019 监控 一、在虚拟机中安装zabbix的客户端 下载网站 Download and install Zabbix 安装系统一直托不进虚拟机中;因为没安装Tools组件 点击虚拟机,选择安装VMware Tools 查看主机名 二、在web页…

ArcGIS在洪水灾害普查、风险评估及淹没制图中的技术应用

2020年国务院办公厅印发《关于开展第一次全国自然灾害综合风险普查的通知》,定于2020年至2022年开展第一次全国自然灾害综合风险普查。水旱灾害风险普查是全国自然灾害综合风险普查的重要组成部分。其中,我国有超过 60%的国土面积、90%以上的人口均受到不…

FFmpeg: 自实现ijkplayer播放器--01项目简介

文章目录 项目介绍流程图播放器实现过程界面展示项目代码 项目介绍 此项目基于FFmeg中 ffplay.c进行二次开发,实现基本的功能,开发软件为Qt 项目优势: 参考ijkplayer播放器,实现UI界面和播放器核心进行解耦,容易添加…

SpringBoot3 函数式web 小记

说明:函数式web是spring5.2之后的一个新特性,Spring Boot 3 进一步优化了这一模型,为开发现代 Web 应用提供了更加灵活、简洁的方法; 函数式web的四大核心对象 - RouterFunction:定义路由信息 - RequestPredicates&am…

15_SpringBoot

文章目录 SpringBoot创建SpringBoot应用官网IDEApom.xml文件启动类 整合SpringMVC整合配置类静态资源处理FilterTomcat其他配置 整合MyBatis约定大于配置的原理配置文件中的值的获取yml形式的配置文件约定大于配置的说明注解配置文件配置项 SpringBoot SpringBoot简化Spring阶…

强化网络安全防线,您的等级保护措施到位了吗?

在这个信息化飞速发展的时代,网络安全已经成为我们每个人都需要关注的问题。无论是企业还是个人,我们的工作和生活都越来越依赖于网络。确保网络环境的安全,防止信息泄露和网络攻击,已经成为了一项至关重要的任务。等级保护制度作…

现货白银的止损:原始止损和移动止损

止损是我们做现货白银必备的工具,它的主要功能是控制投资者的亏损,进而控制我们在交易中的风险。而现货白银的止损主要有两种,一个是原始止损,另外一个是移动止损。 原始止损是我们现货白银止损的基本方法。原始止损的意思就是初次…

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如:git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后,将回滚后的代码push到远端master&#xf…

C++ | Leetcode C++题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; class Solution { public:// 翻转一个子链表&#xff0c;并且返回新的头与尾pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail) {ListNode* prev tail->next;ListNode* p head;while (prev ! tail) {ListN…

C++练级之路——类和对象(中二)

1、运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也是具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型和参数列表与普通的函数类似。 函数名字为&#xff1a;关键字operator后面接需…

华为ensp中静态路由和默认路由的原理及配置

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月17日17点37分 默认路由 [Router] ip route-static <目的网络> <目的网络掩码> <下一跳地址>默认路由的作用是将无法匹配路由表中其他路由表项的…

储能的全生命周期成本即平准化度电成本的计算方法及python实践

1. 平准化度电成本&#xff08;LCOE&#xff09;是一种衡量电力项目经济性的指标 LCOE&#xff08;Levelized Cost of Energy,&#xff09;的概念最早由美国国家可再生能源实验室&#xff08;NREL&#xff09;在1995年提出&#xff0c;它是通过将一个项目生命周期内的所有成本…

公司微信公众号怎么创建?

公众号已经成为企业、品牌、个人IP与粉丝互动的重要平台。今天&#xff0c;伯乐网络传媒就来深入探讨如何巧妙地创建属于自己的微信公众号&#xff0c;为公司或品牌打造一个线上影响力的坚实基石。 一、注册微信公众号 第一步&#xff1a;访问微信公众平台官网 第二步&#x…

27.5k star!微软开源的项目,他好像真的想教会你 AI【文末带源码】

AI 和机器学习&#xff08;ML&#xff09;的发展正在改变我们的世界&#xff0c;从智能助手到自动驾驶汽车&#xff0c;无所不在。对于我的读者朋友来说&#xff0c;大家肯定是多多少少的使用过各种 AI 工具。然而&#xff0c;AI 和 ML 背后的工作机制究竟是什么样的呢&#xf…

volatile

volatile&#xff1a; 用来声明变量的关键字之一&#xff0c;它的主要作用是确保多个线程能够正确地处理共享变量。在多线程编程中&#xff0c;如果一个变量被多个线程共享并且这些线程可能同时修改该变量的值&#xff0c;那么就需要使用 volatile 关键字来保证线程之间对该变量…

IPV6——缓解地址池枯竭

目录 一.IPV6的来源 二.关于IPV6 1.’无限‘的地址空间 2.简化报文头部 3.层次化结构设计 4.即插即用 5.安全特性 6.Qos特性 三.IP v4&#xff0c;IP v6报文头部 IP v4 重点—TTL&#xff08;Time to live&#xff09; —— 存活时间&#xff0c;用于三层防环&#…

二维码电子画册制作教程,教你如何做出高端作品!

当今社会&#xff0c;二维码已经成为了信息传递的重要方式之一&#xff0c;其在电子商务、广告营销、活动推广等领域广泛应用。而如何将二维码巧妙地融入电子画册中&#xff0c;制作出高端、具有吸引力的作品&#xff0c;成为了许多设计师和营销人员关注的焦点 但是很多人却不知…

K8s的亲和、反亲和、污点、容忍

1 亲和与反亲和 亲和性的原理其实很简单&#xff0c;主要利用label标签结合nodeSelector选择器来实现 1.1 Pod和Node 从pod出发&#xff0c;可以分成亲和性和反亲和性&#xff0c;分别对应podAffinity和podAntiAffinity。从node出发&#xff0c;也可以分成亲和性和反亲和性&…

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例 如下图所示,在电脑的开始菜单中找到”Robot Neiborhood”,点击进入, 如下图所示,设置要连接的机器人名称和主机IP地址(要确保自己的电脑和机器人IP地址在同一网段内),点击Add添加, 添加在线…