博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Integer值判断是否相等问题
阅读量:5327 次
发布时间:2019-06-14

本文共 692 字,大约阅读时间需要 2 分钟。

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()比较

转载于:https://www.cnblogs.com/0717GG/p/8252401.html

你可能感兴趣的文章
cocos2dx box2d使用(一)
查看>>
7.3.3 Square Coins
查看>>
[Salesforce] [ADM201] Customizing Chatter Feed Tracking
查看>>
《ARM Cortex-M3权威指南》--语句摘要
查看>>
PHP处理多表查询时的SQL语句拆分与重新组装
查看>>
队列加分项:杨辉三角
查看>>
KnockoutJS 3.X API 第七章 其他技术(3) 延迟更新
查看>>
【Qt开发】关于QWSServer
查看>>
【数据库开发】MySQL修改root密码
查看>>
【计算机视觉】【并行计算与CUDA开发】GPU硬编码
查看>>
01--DNS服务器2
查看>>
nginx简单的rewrite配置
查看>>
vue loading组件
查看>>
求链表是否有环,及环入口,环长度
查看>>
Unity 单元测试(NUnit,UnityTestTools)
查看>>
mysql 基础
查看>>
【转】C语言编程中static变量详解
查看>>
linux安装json
查看>>
诺基亚HERE地图
查看>>
动态创建和移除HTML标签
查看>>