Integer比较不要使用==使用equals()或Integer.intValue()
昨天在开发中遇到一个问题,定义了两个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()相关推荐
- integer比较_每日一题:Integer、int 的区别
点击上方蓝色字体,选择"标星公众号"优质文章,第一时间送达来自 | chenxiangxiang链接 | cnblogs.com/cxxjohnson/p/10504840.htm ...
- integer超出范围_BigInteger:可以让超过Integer范围内的数据进行运算
package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进行运算 * * 构造方法: ...
- double转integer java_在Java中将Double转换为Integer
我认为如果不覆盖其背后的_539617,就无法理解其他答案 . 您无法直接将 Integer 转换为 Double 对象 . 此外 Double 和 Integer 是不可变对象,因此您无法以任何方式 ...
- java equal 不等于_java Integer判断相等只能使用equals(不能使用==)
java Integer包装类和基础类型int,相互之间都可以使用==判断相等,平时没注意不能使用==,也不会轻易报错,但是实际只能用equals,而int之间就没得选,只能==. 测试代码 Inte ...
- Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
1. 为什么Integer a=34556,b=34556;但a==b为false呢? 有些人不以为然的认为,因为这是两个对象,所以肯定是false.对于上面的问题,这个回答确实没有问题. 那么若In ...
- leetcode 12 ,13 Integer to Roman amp;amp;Roman to Integer 罗马与阿拉伯数组转换
12 Integer to Roman 13 Roman to Integer 有可能不注意的结果: class Solution {public:/*1.相同的数字连写,所表示的数等于这些数字相加得 ...
- integer对应java类型_Java中的Integer和int等包装类和基本数据类型简单比较
在初学Java时我们接触到的都是一些基本的数据类型,比如int , float,double等.但是对于高等语言JAVA等面向对象的语言来说,一切都是对象.如此看来这些基本数据类型显得就有些'单薄'- ...
- 现在有一个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 ...
- java中integer取值范围,Java中的Integer取值范围(-2^32 ~ 2^31 - 1)分析
在Java中Integer的最小值(MIN_VALUE).最大值(MAX_VALUE)定义如下: /** * A constant holding the minimum value an {@cod ...
最新文章
- 企业管理难题:团队协作
- 贪吃蛇原型实现基本思路
- 圈子 | 大数据分析汽车O2O的机会
- 使用account lock或者account unlock语句
- DQL查询语句内容整理
- 电脑系统哪个最好用_袪痘袪痘印哪个产品最好 祛痘印最好用的产品十大推荐...
- spyder中绘图无法显示负号_[转载]Matlab常用函数
- element-ui select单选切换多选问题解决
- Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程
- 迭代总结(随时更新)
- 动态链接库(DLL)开发基础
- Android TV开机优化
- 截止2021年7月中国有多少大学生?
- win10系统与时间服务器同步超时,Win10时间同步出错怎么办 Win10时间同步出错解决方法...
- 系统管理员已经限制你可以使用的登录类型(网络或交互式)
- Ubuntu Server 20.04 设置静态 IP
- Multi-Tenancy模式,基础服务大规模扩张的时候,是应该推进了。
- 电脑怎么图片转文字?建议收藏这几个方法
- H3C对接外部Portal+Radius认证计费系统实现mac-trigger快速认证Mac无感知认证并结合L2TP实现阿里云部署对接配置
- 需求分析——软件需求规格说明书标准目录