016 Java中 int、Integer和 new Integer() 使用==比较

2023-10-28

Java中 int、Integer和 new Integer() 使用==比较

  • int则是java的一种基本数据类型,其定义的是基本数据类型变量 ;Integer是int的包装类,其定义的是引用类型变量
  • 基本数据类类型存的是数值本身;引用类型变量在内存放的是数据的引用()
  • 基本类型比较的是他们的值大小(通过),而引用类型比较的是他们的引用地址==
  • Integer变量必须实例化后才能使用,而int变量不需要
  • Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
  • Integer的默认值是null,int的默认值是0

解析如下面试题

public static void main(String[] args) {
     int a1 = 12;
     int a2 = 12;
     Integer b1 = new Integer(12);
     Integer b2 = new Integer(12);
     Integer b3 = new Integer(127);
     Integer c1 = 127;
     Integer c2 = Integer.valueOf(127);
     Integer d1 = 128;
     Integer d2 = 128;
     System.out.println(a1 == a2); //true  int基本数据类型比较值
     System.out.println(a1 == b1); //true  a1、b1  int和Integer使用==比较  Integer会执行拆箱
     System.out.println(b1 == b2); //false b1,b2 是引用类型,比较堆中的内存地址
     System.out.println(b3 == c1); //false b3指向堆内存的引用,c1 指向常量池
     System.out.println(c1 == c2); //true //因为-128到127java已经进行了缓存。 故相等
     System.out.println(d1 == d2); //false  d1、d2 引用类型 不适用缓存 使用new Integer
 }

int a1 = 12; a1 存的是数值12。

Integer b1 = new Integer(12); b1 存储的是数值12 在栈中的内存地址。

Integer c1 = 127; 指向的是java常量池中的对象。

使用==比较

两个通过new生成的Integer变量永远是不相等的。
因为new生成的是两个对象,其内存地址不同。

Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true。
因为包装类Integer和基本数据类型int比较时,java会自动将Integer拆箱为int,然后进行比较,实际上就变为两个int变量的比较。

非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。
因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同。

两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
因为-128到127java已经进行了缓存。

Java 在编译 Integer c1 = 127 时,会翻译成 Integer c1 = Integer.valueOf(127)。 valueOf方法如下:

//超出-128到127 才使用new Integer(i)
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

推荐:https://www.cnblogs.com/cdlyy/articles/12512277.html

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

016 Java中 int、Integer和 new Integer() 使用==比较 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • cookie,session,token的区别和作用

    1 cookie session token的出现的背景 很久很久以前 Web 基本上就是文档的浏览而已 既然是浏览 作为服务器 不需要记录谁在某一段时间里都浏览了什么文档 每次请求都是一个新的HTTP协议 就是请求加响应 尤其是我不用记住
  • Unity自定义序列帧播放器

    目录 创建原因 一 主要功能 1 播放 从指定帧播放 2 跳转到指定帧 3 暂停 和 停止 4 播放完成回调 二 代码 创建原因 使用Animator进行序列帧控制的话 播放到指定帧 重新播放这些操作使用起来非常的不方便 所以自己写了一个序
  • uni-app项目中 component is 使用时 h5生效 小程序中渲染等不支持,下面有解决方法

    前言 由于公司业务调整 特意学习下uni项目框架 其实根据官方api就是实现很多功能 其实都是一些小坑要走 下面来说一下uni app项目中 component is 使用时 h5生效 小程序中渲染支付宝等不支持 下面有解决方法 查了下官网
  • AcWing 376. 机器任务(最小点覆盖&&匈牙利算法)

    输入样例 5 5 10 0 1 1 1 1 2 2 1 3 3 1 4 4 2 1 5 2 2 6 2 3 7 2 4 8 3 3 9 4 3 0 输出样例 3 解析 二分图最小点覆盖 最大匹配数 所以跑一边匈牙利算法即可 include
  • 用NVivo图表培养您的视觉素养

    NVivo是一款支持定性研究方法和混合研究方法的软件 它可以帮助您收集 整理和分析访谈 焦点小组讨论 问卷调查 音频等内容 全新的NVivo12更可协助您处理社交媒体和网页内容 NVivo强大的搜索 查询和可视化工具使您可以深入地分析您的数
  • 深度学习三(PyTorch物体检测实战)

    深度学习三 PyTorch物体检测实战 文章目录 深度学习三 PyTorch物体检测实战 1 网络骨架 Backbone 1 1 神经网络基本组成 1 1 1 卷积层 1 1 2 激活函数层 1 1 3 池化层 1 1 4 Dropout层
  • Open3d读写ply点云文件

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 1 Open3d 安
  • (收藏)强烈推荐几个学习数据结构和算法的网站和可视化工具

    一 学算法必去的一个网站 首先有一个网站那是每一个学习数据结构与算法都必须去的网站 说出来你就知道了 那就是大名鼎鼎的LeetCode 链接直达 https leetcode com 中文版长这个样子的 点开探索给你看看 强烈推荐人手一个啊
  • The evil CMake -- Compile bug, missing ')', error line number

    In case our CMakeLists txt have following codes following sentence should be wirte as FILE TO NATIVE PATH CMAKE SOURCE D
  • 蓝桥杯——七段码(并查集+二进制情况罗列)

    问题网站 https www lanqiao cn problems 595 learning contest id 73 这道题就是相邻的段可以表示一种符号 最少必须要有一段 其实我最初的想法就是把全部的符号表示按照符号个数分别罗列出来
  • 浅谈子网掩码

    一 IP地址 1 A类地址 范围 0 0 0 0 127 255 255 255 网络数 128 主机数 16777216 2 B类地址 范围 128 0 0 0 191 255 255 255 网络数 16384 主机数 65535 3
  • STM32控制舵机及其原理

    大家先看懂这张图 我们就是根据这张图 实现定时器产生PWM控制舵机旋转 本次采用的STM32F1单片机控制S90舵机 直接COPY就可以使用 经过本人实测 采用PB13 定时器1PWM通道1实现本次的控制 从0度控制180度旋转改变占空比实
  • Spring Security3.1 最新配置实例 .

    这几天学习了一下Spring Security3 1 从官网下载了Spring Security3 1版本进行练习 经过多次尝试才摸清了其中的一些原理 本人不才 希望能帮助大家 还有 这次我第二次写博客啊 文体不是很行 希望能让观看者不产生
  • 敏捷项目编程:从乙方视角探讨

    敏捷开发是一种迭代 增量的软件开发方法 强调快速响应变化 持续交付和紧密合作 在敏捷项目中 编程是一个至关重要的环节 乙方 开发团队 在其中扮演着关键的角色 本文将从乙方视角出发 详细探讨敏捷项目编程的相关内容 并提供相应的源代码示例 敏捷
  • 关于Qt5.12.0找不到Qmysql的问题解决方法

    这是第二次需要自己编译Qt库 上一次是需要用到MQTT Qt找不到库也是需要自己编译 项目需要用到数据库 学习途中发现了一些问题 故记录一下 网上看了是因为新版不支持mysql了 需要自己编译 本文章的解决方法就是通过编译mysql 如下图
  • AntD-tree组件使用详析

    目录 一 selectedKeys与onSelect 官方文档 代码演示 onSelect 注意事项 二 expandedKeys与onExpand 官方文档 代码演示 onExpand 注意事项 三 loadedKeys与onLoad和o
  • 【whr的深度学习总结1】使用Matconvnet训练imbalance全连接网络

    matconvnet只提供了卷积函数 并没有提供全连接函数 那么如何在卷积函数上训练全连接呢 首先 我们要清楚一件事 卷积核为1 1同时步长是1的网络就是全连接 那么配置网络的时候就只需执行卷积函数 同时配置卷积核的大小就可以 这是我的配置
  • 13种老人不适合带孩子_如果是这3种老人,并不建议他们带孩子,不是偏见是为孩子好...

    文 勤亲妈妈 文章原创 欢迎个人转发分享 孩子是一个家庭生命的传承 是全家人的 掌中宝 有了孩子之后 不只是父母的心思和注意力会放在孩子身上 就连老人对孩子也是非常的宠爱 都说 隔辈儿亲 隔辈儿亲 老人对孩子的爱是毋庸置疑的 上了年纪之后
  • uniapp如何使用uview中的loadmore上拉加载

    效果 引入loadmore 首先搜索和tab的样式
  • 016 Java中 int、Integer和 new Integer() 使用==比较

    Java中 int Integer和 new Integer 使用 比较 int则是java的一种基本数据类型 其定义的是基本数据类型变量 Integer是int的包装类 其定义的是引用类型变量 基本数据类类型存的是数值本身 引用类型变量在