昨天在开发中遇到一个问题,定义了两个Integer变量,暂且定义为Integer a;  Integer b;

这两个值由前端赋值并传到后台,前台传的是a = 12345, b = 12345,  但我在后台比较的时候 if (a == b),却返回false,好无语啊,不都是12345吗?为什么返回false,后来改为equals(),返回true,但其中的有些端倪还不太清楚,现总结下:

我们知道Integer是int的包装类,在jdk1.5以上,可以实现自动装箱拆箱,就是jdk里面会自动帮我们转换,不需要我们手动去强转,所以我们经常在这两种类型中随意写,平时也没什么注意

但Integer他是对象,我们知道 == 比较的是堆中的地址,但有个奇怪的事是, 如果 Integer a = 123, Integer b = 123,可以返回true,但如果Integer a = 12345, Integer b = 12345,返回false,这就是jdk的东西,我们看下Integer的源码

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

默认IntegerCache.low 是-127,Integer.high是128,如果在这个区间内,他就会把变量i当做一个变量,放到内存中;但如果不在这个范围内,就会去new一个Integer对象,

而我在代码中,两个Integer值都不在这个范围内,所以jdk帮我new了两个实例,这样在用==,肯定是false。

所以如果要比较Integer的值,比较靠谱的是通过Integer.intValue();这样出来的就是int值,就可以直接比较了;或者equals()比较

Integer比较不要使用==使用equals()或Integer.intValue()相关推荐

  1. integer比较_每日一题:Integer、int 的区别

    点击上方蓝色字体,选择"标星公众号"优质文章,第一时间送达来自 | chenxiangxiang链接 | cnblogs.com/cxxjohnson/p/10504840.htm ...

  2. integer超出范围_BigInteger:可以让超过Integer范围内的数据进行运算

    package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进行运算 * * 构造方法: ...

  3. double转integer java_在Java中将Double转换为Integer

    我认为如果不覆盖其背后的_539617,就无法理解其他答案 . 您无法直接将 Integer 转换为 Double 对象 . 此外 Double 和 Integer 是不可变对象,因此您无法以任何方式 ...

  4. java equal 不等于_java Integer判断相等只能使用equals(不能使用==)

    java Integer包装类和基础类型int,相互之间都可以使用==判断相等,平时没注意不能使用==,也不会轻易报错,但是实际只能用equals,而int之间就没得选,只能==. 测试代码 Inte ...

  5. Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false

    1. 为什么Integer a=34556,b=34556;但a==b为false呢? 有些人不以为然的认为,因为这是两个对象,所以肯定是false.对于上面的问题,这个回答确实没有问题. 那么若In ...

  6. leetcode 12 ,13 Integer to Roman amp;amp;Roman to Integer 罗马与阿拉伯数组转换

    12 Integer to Roman 13 Roman to Integer 有可能不注意的结果: class Solution {public:/*1.相同的数字连写,所表示的数等于这些数字相加得 ...

  7. integer对应java类型_Java中的Integer和int等包装类和基本数据类型简单比较

    在初学Java时我们接触到的都是一些基本的数据类型,比如int , float,double等.但是对于高等语言JAVA等面向对象的语言来说,一切都是对象.如此看来这些基本数据类型显得就有些'单薄'- ...

  8. 现在有一个map集合如下: Map<Integer,String> map = new HashMap<Integer, String>(); map.put(1, “

    代码 import java.util.*;/*4. 现在有一个map集合如下:Map<Integer,String> map = new HashMap<Integer, Stri ...

  9. java中integer取值范围,Java中的Integer取值范围(-2^32 ~ 2^31 - 1)分析

    在Java中Integer的最小值(MIN_VALUE).最大值(MAX_VALUE)定义如下: /** * A constant holding the minimum value an {@cod ...

最新文章

  1. 企业管理难题:团队协作
  2. 贪吃蛇原型实现基本思路
  3. 圈子 | 大数据分析汽车O2O的机会
  4. 使用account lock或者account unlock语句
  5. DQL查询语句内容整理
  6. 电脑系统哪个最好用_袪痘袪痘印哪个产品最好 祛痘印最好用的产品十大推荐...
  7. spyder中绘图无法显示负号_[转载]Matlab常用函数
  8. element-ui select单选切换多选问题解决
  9. Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程
  10. 迭代总结(随时更新)
  11. 动态链接库(DLL)开发基础
  12. Android TV开机优化
  13. 截止2021年7月中国有多少大学生?
  14. win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
  15. 系统管理员已经限制你可以使用的登录类型(网络或交互式)
  16. Ubuntu Server 20.04 设置静态 IP
  17. Multi-Tenancy模式,基础服务大规模扩张的时候,是应该推进了。
  18. 电脑怎么图片转文字?建议收藏这几个方法
  19. H3C对接外部Portal+Radius认证计费系统实现mac-trigger快速认证Mac无感知认证并结合L2TP实现阿里云部署对接配置
  20. 需求分析——软件需求规格说明书标准目录

热门文章

  1. 有哪些值得推荐的.NET ORM框架?
  2. 看刘强东38分钟牛津大学演讲视频有感
  3. MCU端 Boot+App设计方案
  4. 机械专业与计算机结合的论文,机械类工程师论文范文
  5. 报道|香港科大-越秀集团2020百万创赛圆满落幕
  6. GMT5在linux下的中文支持
  7. 修改ZABBIX的logo,最终版方法,简单好用,适用于所有ZABBIX版本,一学即会!!!!!
  8. 红旗Linux系统安装步骤
  9. 什么是Redis、Redis的作用以及应用场景
  10. linux 运行ctl文件_linux journalctl 命令