Integer 和 int

2023-11-19

一、区别

        1.Integer是int的包装类,int则是java的一种基本的数据类型

        2.Integer变量必须实例化之后才能使用,而int变量不需要实例化;

        3.Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值

        4.Integer的默认值是null,而int的默认值是0。

二、比较

        首先这里要区分一下 “==” 和 equals 的区别:

  • “==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值
  • equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值

        所以根据上面的解释我们知道,int是基本数据类型,而Integer是对象的引用。所以在比较时是有区别的。这里着重以 “==”来区分,因为“==”比较对象和引用时是不同的。

  1.Int 和 Int 比较 

        Int为基本数据类型,使用 "==" 比较,直接比较的是其存储的值。

 2.Integer 和 Int 比较 

        Integer变量和int变量进行比较时,java会自动拆箱为int,然后进行比较,实际上就是两个int变量进行比较,与2中int和int的比较相同。

 3.Integer 和 Integer 比较

        Integer是Integer对象的引用,所以两个通过new生成的Integer是两个不同的对象,其内存地址也不同,因此变量永远是不相同的。

注意以下俩种情况:

        第一种:

                ​​​​​​​        ​​​​​​​        ​​​​​​​​​​​​​​

        非new生成的Integer变量指向的是Java常量池中的对象,new生成的Integer变量指向堆中新建的对象,两者在内存中地址不同。

        第二种:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

         此处两个Integer类均为对象引用比较应该用equals,而这里使用==判断地址,结果本应该是false,但打印出来却是true,这是为什么?
        首先,直接声明 Integer a = 100;的时候,Java自动装箱为Integer a = Integer.valueOf(100);查看Integer类的valueOf方法:

// range [-128, 127] must be interned (JLS7 5.1.7)
// static final int low = -128;
// assert IntegerCache.high >= 127;
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

        发现,当 i>=-128并且 i<=127的时候,第一次声明会将 i 的值放入缓存中,第二次直接复用缓存里边已有的对象,而不是重新创建一个Integer对象。这个区间内的Integer值可以直接使用 == 判断,但这个区间外的所有数据,都会在堆上产生,并不会复用已有对象。所以就会出现一种我们平时比较容易出错的情况,当使用 “==” 比较俩个值相等的Integer 引用时,当比较的值在 i>=-128并且 i<=127 这个区间内时,则相等,不在此区间则不等。因此我们在比较俩个Integer类型时,尽量使用equals来进行比较。

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

Integer 和 int 的相关文章

随机推荐

  • 10个有用的Siebel标准功能

    作为第一篇blog 不想罗列一些Siebel的市场信息或者功能介绍等Overview 以下Siebel非常有用的10个小的tip 1 自定义数据显示格式 用户可以根据自己需要隐藏界面上的某些列 也可以通过拖放的方式控制列显示的顺序 2 自动
  • docker && Tugraph

    拉取tugraph镜像 docker pull tugraph tugraph db centos7 启动docker docker run d p 7070 7070 p 9090 9090 name tugraph demo tugra
  • Oracle Sequence Cache 参数说明

    之前整理的一篇文章 ORACLE SEQUENCE 介绍 http blog csdn net tianlesoftware archive 2009 10 30 4745039 aspx 之前整理的一篇文章 那是还是写blog初期的作品
  • nacos 的 cp 和 ap

    如果只有一个 nacos 节点 可以直接以单机模式启动 naming 功能是完全正常的 也可以以集群模式启动 配置文件中只配一个节点即可 但是 因为此时 nacos 的 raft 实现中 一个节点是选不了主的 所以 cp 模式的 raft
  • matlab绘制贝叶斯曲线,Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

    原文链接 http tecdat cn p 15508 绘制ROC曲线通过Logistic回归进行分类 加载样本数据 load fisheriris通过使用与versicolor和virginica物种相对应的度量来定义二元分类问题 pre
  • java 布尔类型_Java布尔类型

    Java布尔类型 在Java语言中布尔类型的值只包括true和false 没有其他值 不包括1和0 布尔类型的数据在开发中主要使用在逻辑判断方面 例如 如果外面在下雨 我出门带一把雨伞 如果明天休息 咱们就一起出去玩耍吧 请看一段程序 以下
  • 文件包含漏洞及绕过方法(以php为例)

    一 文件包含漏洞的由来 简单的来说 为了减少 重复造轮子 引入了文件包含函数 可以直接使用文件中的文件和代码 当通过动态获文件时 或者需要引用网络上其他文件时 用户通过对变量值的修改访问规定的文件 但是未对变量值进行校验 导致有了可乘之机
  • 前端vue面试

    用户登陆产品了解生命周期vuex数据平台干嘛vue X怎么持久localstore和cokIE区别路由传惨路由传惨两种方式区别 1 谈一谈你对keep alive的了解P1 2 三 v if v show的区别 3 四 v if和v for
  • 服务器柜机位置摆放电子图,客厅柜机摆放—客厅柜机空调摆放方法介绍

    客厅是一家人在一起活动最多的房间 所以家具及家电等产品的摆放就要有一定的讲究了 其中柜机空调的摆放方法尤其为消费者所关注 下面 小编就详细的向您介绍一下客厅柜机摆放的方法 有兴趣的朋友一起来了解一下吧 客厅柜机摆放 客厅柜机摆放 正确摆放位
  • VectorCAST软件下载安装使用试用培训购买

    商业软件如需下载安装使用试用 可以通过下面添加 提供编译器定制 技术支持 培训 wanglequshuijiao 有需要可以加详细聊 vx 静态测试软件 QAC Klocwork Coverity等 单元测试软件 集成测试软件 Vector
  • 超详细!Jmeter性能测试(二)

    Jmeter 性能测试 二 关联 正则表达式提取器和JSON Extractor提取器 接入上篇博文继续 上篇地址 https blog csdn net weixin 44954642 article details 103054387
  • MySQL几种创建索引的方式

    一 创建表时创建索引 key 索引名 column 二 表创建好后创建索引 1 通过Alter创建索引 PRIMARY KEY 主键索引 mysql gt ALTER TABLE table name ADD PRIMARY KEY col
  • 设计模式七大原则

    1 设计模式的目的 编写软件过程中 程序员面临着来自耦合性 内聚性以及可维护性 可扩展性 重用性 灵活性 等多方面的挑战 设计模式是为了让程序 软件 具有更好 1 代码重用性 即 相同功能的代码 不用多次编写 2 可读性 即 编程规范性 便
  • npm插件安装插件失败问题解决办法

    目录 问题索引列表 错误记录 在线地址pdf转word https www camscanner com pdftopic 问题索引列表 1 配置安装自定义位置nodejs 1 1 使用npm安装模块的位置有默认安装位置和指定安装位置 在W
  • Java自学第15天 面向对象(全)

    面向过程 面向对象 面向过程思想 步骤清晰简单 第一步做什么 第二步做什么 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚 分类的思维模式 思考问题首先会解决问题需要哪些分类 然后对这些分类进行单独思考 最后 才对某个分类下的细
  • javaSE进阶1之static用法

    JavaSE进阶 静态关键字 static static关键字的作用 成员变量分类 静态成员变量 实例成员变量 static修饰成员变量内存原理 static 修饰成员方法的基本用法 成员方法的分类 static修饰成员方法内存原理 sta
  • [原]Pro*C介绍-内嵌SQL

    Translate by Z Jingwei Document address http www db stanford edu ullman fcdb oracle or proc html Pro C介绍内嵌SQL 概要 Pro C语法
  • selenium自动化测试实战

    一 Selenium介绍 Selenium 是什么 一句话 自动化测试工具 它支持各种浏览器 包括 Chrome Safari Firefox 等主流界面式浏览器 如果你在这些浏览器里面安装一个 Selenium 的插件 那么便可以方便地实
  • Java开发中关于实体类的一些注解

    JSONField注解 FastJson中的注解 JSONField 一般作用在get set方法 常用的有以下三个场景 修改字段映射 private String name 实体类序列化为json字符串的时候 该类的name字段 序列化为
  • Integer 和 int

    一 区别 1 Integer是int的包装类 int则是java的一种基本的数据类型 2 Integer变量必须实例化之后才能使用 而int变量不需要实例化 3 Integer实际是对象的引用 当new一个Integer时 实际上生成一个指