基本数据类型的包装类

2023-11-16

本人之所以把包装类作为单独一篇博文来写,主要是因为这里知识比较冗杂,为了帮助大家比较好的理解深层次的东西而不是做一个搬砖的这里我有必要单开一篇博文来了解下。
首先我们来分析一下基本数据类型和包装类:

  • 包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类型不是。
  • 包装类型是引用的传递;基本类型是值的传递
  • 声明方式不同:
    基本数据类型不需要new关键字;
    包装类型需要new在堆内存中进行new来分配内存空间
  • 存储位置不同:
    基本数据类型直接将值保存在值栈中;
    包装类型是把对象放在堆中,然后通过对象的引用来调用他们
  • 初始值不同:
    int的初始值为 0 、 boolean的初始值为false
    包装类型的初始值为null
  • 使用方式不同:
    基本数据类型直接赋值使用就好;
    包装类型是在集合如 coolectionMap时使用

包装类和基本数据类型有如下对应关系:
Integer对应 int
Byte 对应 byte
Short 对应 short
Long 对应 long
Float 对应float
Double 对应double
Boolean 对应boolean
Character 对应char

基本数据类型对应的包装类 包含了这些类型的基本操作,比如最大最小值,String转化为对应的值等。
String 转基本数据类型比如:
我现在想把string类型的"10"转化为int类型,那么请看如下截图以及代码:
在这里插入图片描述
可以看到integer下有许多的方法。

int b = Integer.parseInt("10");
System.out.println(b);

在这里插入图片描述
下面我们再来看一段代码:

 int a = 10;
 Integer b = 10; 

在这里插入图片描述
这里可以看到这两段代码均没有报错,但是正如前文所提a是一个基本数据类型,我们当然可以给他直接赋值。但是作为Integer他是一个类,所以这里我们为什么也直接给一个封装好的类赋值呢?
这里就涉及到一个拆箱装箱的问题。

好下面我们一步一步的解决。首先我们为什么可以给Integer赋值呢,因为Integer中有一个valueOf()方法。我用的编译器是Eclipse,如果你也用的是Eclipse那就按住ctrl键再单击代码中的Integer。找到以int为参数的valueOf方法。下面我截图给大家:
在这里插入图片描述
当你直接给Integer类型的变量赋值的时候Integer对象会自动调用这个方法进行装箱。
下面我们在来写一段代码我们看一下a和b是否相等。

int a = 10;
Integer b = 10; 
System.out.println(a==b);

看下结果:
在这里插入图片描述
好,下面我们把数字放大些:

int a = 1000;
Integer b = 1000; 
System.out.println(a==b);

在这里插入图片描述
没错结果依然为真。
下面我们再换如下代码进行实验:

Integer a = 10;
Integer b = 10; 
System.out.println(a==b);

大家不妨先猜测一下真假,首先上两个例子的代码是一个int和一个integer,当我们给他们两个直接赋值时候会涉及到一个自动拆箱装箱的问题就是自动在int和integer之间转换,好了不磨叽了我们来看结果:
在这里插入图片描述
你没有看错依然为true。可能到这里会有人有疑问感觉我说了半天等于没说,请稍安勿躁,记住慢慢来,比较快。
我们再来给一个大一些的值:

  Integer a = 1000;
  Integer b = 1000; 
  System.out.println(a==b);

在这里插入图片描述
这次就出现了诸位一直在期待的false。

为什么:我来解释一下
对于对象,引用类型,"=="比较的是对象的内存地址这一点请务必清楚,下面稍微有些复杂了,我们再来看一下integer的valueOf方法的函数体。

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

上述方法中IntegerCache是一个数组,其范围是-127到128当我们没有逾越这个范围的,所以当我们赋值其中的值的时候,如果没有逾越这个范围,那么它是会直接从数组中取值,而不会在堆中再开辟一个内存。所以这个时候我们赋值为10的时候是可以比较的。但是当我们赋值为1000的时候,我们再看上面那段代码,已经不能再满足if的条件。所以它直接又返回了new了一个新的东西。所以等于是在内存中又开辟了两个空间,比如一个位置是0x20031,另一个是0x20032。所以自然就不相等了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基本数据类型的包装类 的相关文章

  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • Quarkus 不以编程方式选择 bean

    我试图以编程方式选择 bean 但 quarkus 不会注入 bean 并引发异常 不支持吗 public enum ReportType ONE TWO Qualifier Retention RUNTIME Target METHOD
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • Kafka Java Consumer 已关闭

    我刚刚开始使用卡夫卡 我面临着消费者的一个小问题 我用Java写了一个消费者 我收到此异常 IllegalStateException 此消费者已关闭 我在以下行中遇到异常 ConsumerRecords
  • 当 JMS Prod 位于辅助 POJO 类中时,如何在事务中包含 JMS Producer

    简短的问题 有没有办法强制无状态 EJB 调用的 POJO 存在于 EJB 的上下文中 以便事务和资源注入可以在 POJO 中工作 具体来说 在我想要做的事情的上下文中 如何在 EJB 的事务中包含 POJO JMS 生产者 该生产者在调用
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 查找数组中的组合

    我在java中有一个像这样的二维数组 transmission communication tv television approach memorycode methodact 我需要获得所有组合 例如 transmission appr
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 多线程——更快的方法?

    我有一堂有吸气剂的课程getInt 和一个二传手setInt 在某个领域 比如说领域 Integer Int 一个类的一个对象 比如说SomeClass The setInt 这里是同步的 getInt isn t 我正在更新的值Int来自
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • AABB和OBB包围盒简介

    一 AABB立方体边界框检测 用球体去近似地代表物体运算量很小 但在游戏中的大多数物体是方的或者长条形的 应该用方盒来代表物体 另一种常见的检测模型是立方体边界框 如图10 31展示了一个AABB检测盒和它里面的物体 坐标轴平行 Axial
  • Nginx反向代理负载均衡配置详解

    一 Nginx特性 Nginx使用可扩展的事件驱动 不是传统的过程驱动架构 在传统的Web服务器体系结构中 每个客户端连接作为一个单独的进程或线程处理 随着网站的流行度增加 并发连接数量的增加 Web服务器减慢 延迟了对用户的响应 从技术角
  • 【SpringBoot】简介及传统的 Spring 框架:对比和分析

    哈喽 哈喽 大家好 我是你们的老朋友 保护小周 今天给大家带来的是 SpringBoot 的简介 SpringBoot 项目的创建 相较于 Spring 框架的优点 1 快速的集成框架 2 内置运行容器 快速的部署项目 3 摒弃繁琐的 xm
  • 活动报名|X-Decoder&SEEM:从开放词库的图像理解到像素分割,如何用一个模型做N个任务理解M个模态...

    2023年04月27日 星期四 11 00 12 00 由智源社区主办的 智源LIVE 第39期线上活动 X Decoder SEEM 从开放词库的图像理解到像素分割 如何用一个模型做N个任务理解M个模态本期活动将在线举办 阅读原文 报名即
  • 科技感十足的網站頁面

    http www bootstrapmb com item 9102 preview
  • 信号盒子连接服务器,【当贝市场】简单4步解决电视盒子没信号问题

    原标题 当贝市场 简单4步解决电视盒子没信号问题 看电视是家庭娱乐方式 很多家庭都喜欢用电视机顶盒来看电视直播 很多用户也会遇到一个问题就是机顶盒没信号怎么看电视直播呢 大家都知道机顶盒看直播 都是在有网有信号的状态下才能完美呈现呢 机顶盒
  • element Plus Select选择器实现查询搜索 下拉选择

    这Select选择器用于哪里 怎么用 Select 选择器可以用于许多不同的场景 包括但不限于以下几个方面 表单 Select 选择器常用于表单中的下拉选择字段 例如选择国家 城市 性别 职位等 用户可以从预定义的选项中选择一个值 以便提交
  • gd32f103 串口数据处理说明

    1 数据接收或发送完毕 发出复位信号 GetBitState USART 接收数据 ch U8 USART DataReceive USART1 类似 C51 直接向寄存器写数据自动发送 UART1 SendChar ch 2 操作逻辑 发
  • 一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路?

    一个机器人位于一个 m x n 网格的左上角 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 问总共有多少条不同的路 var machinePath1 function m n var arr new Array m n i
  • Deformable DETR源码解读

    文章目录 一 网络创新点 二 流程详解 part 1 deformable detr模块 part 2 deformable transformer模块 part3 Encoder模块 part 4 MSDeformAttn part5 D
  • Linux系统调试之gdbserver远程调试程序

    本篇讲解如何使用gdbserver对目标开发板上的程序进行远程调试 安装 GDBSERVER 首先在开发板上安装 gdbserver apt install gdbserver gdbserver 用法 gdbserver用法描述 Usag
  • redis概述-1

    视频链接 尚硅谷 Redis 6 入门到精通 超详细 教程 哔哩哔哩 bilibili 早期架构 随着web2 0 手机端和pc端的请求增加 应用服务器会有cpu及内存压力 数据服务器有IO压力 针对应用服务器 采用分布式 负载均衡的方式进
  • ILRuntime Unity热更新

    在新的项目中 使用到了ILRuntime的热更新方式 不同于XLua等 这种方式的热更新是由纯C 实现的 所以就不需要客户端懂Lua的代码 更详细的介绍可以看官方的文档 官方的介绍及文档为 http ourpalm github io IL
  • vcpkg安装和使用--学习入门

    前言 vcpkg是一个C 的包管理器 包管理器是专门管理一些代码库的 比如一些大佬们开源的一些NB的框架 我们可以用vcpkg将他们放到自己的项目中 然后就可以直接用了 我用的win10 vs2019 1 安装 1 先git clone下载
  • openwrt中计划任务的设置

    寝室的供网规则为周一到周五零点断网 六点开网 双休日通宵供网 故设置一套计划任务提高路由器使用效率 crontab命令常见于Unix和类Unix的操作系统之中 用于设置周期性被执行的指令 操作符号 在一个区域里填写多个数值的方法 逗号 分开
  • AcWing基础课题集汇总

    本篇博文是笔者归纳汇总的AcWing基础课题集 方便读者后期复盘巩固 PS 本篇文章只给出完整的算法实现 并没有讲解具体的算法思路 如果想看算法思路 可以阅读笔者往期写过的文章 或许会有 也可以移步AcWing官网看详情 本篇文章的特点 每
  • Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

    一 前言 时间类QDateTime QDate QTime QTimeZone保存了Qt的时间 日期 时区信息 常用的时间类部件都会用到这些数据结构 常用概念有年 月 日 时 分 秒 毫秒和时区 时间和时区就关系到时间戳和UTC的概念 UT
  • Debian(Linux)系统Samba安装和配置

    samba安装 root用户下直接使用以下命令 apt get install samba 若是普通用户下使用以下命令 sudo apt get install samba samba配置 samba的配置文件在 etc samba 路径下
  • 1-2动态图

    文章目录 动态图 一 环境配置 二 基本用法 三 使用python的控制流 四 构建更加灵活的网络 控制流 五 构建更加灵活的网络 共享权重 The End 动态图 在这种模式下 每次执行一个运算 可以立即得到结果 而不是事先定义好网络结构
  • 基本数据类型的包装类

    本人之所以把包装类作为单独一篇博文来写 主要是因为这里知识比较冗杂 为了帮助大家比较好的理解深层次的东西而不是做一个搬砖的这里我有必要单开一篇博文来了解下 首先我们来分析一下基本数据类型和包装类 包装类是对象 拥有方法和字段 对象的调用都是