首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Integer用==判断有什么问题

Integer用==判断有什么问题

原创
作者头像
麦辣鸡腿堡
发布2025-03-18 11:29:06
发布2025-03-18 11:29:06
39800
代码可运行
举报
文章被收录于专栏:面试面试
运行总次数:0
代码可运行

一、引用比较 vs 值比较

  • == 的本质:对对象类型(如 Integer)而言,== 比较的是内存地址(即是否为同一个对象),而非实际值 。
  • equals() 的作用Integer 重写了 equals() 方法,直接比较整数值是否相等,与对象引用无关 。

示例

代码语言:javascript
代码运行次数:0
运行
复制
Integer a = 200;
Integer b = 200;
System.out.println(a == b);       // false(引用不同)
System.out.println(a.equals(b));  // true(值相同)

二、缓存机制导致的陷阱

Java 对 Integer 对象在 -128 到 127 范围内进行了缓存优化,自动装箱(如 Integer a = 100)会复用缓存对象,此时 == 可能返回 true;但超出此范围时,每次自动装箱会创建新对象,导致 == 失效 。

示例

代码语言:javascript
代码运行次数:0
运行
复制
Integer c = 100;
Integer d = 100;
System.out.println(c == d);    // true(缓存范围内)

Integer e = 200;
Integer f = 200;
System.out.println(e == f);    // false(超出缓存范围,创建新对象)

三、显式 new 的干扰

即使数值在缓存范围内,显式使用 new 关键字 会强制创建新对象,== 比较必定返回 false

代码语言:javascript
代码运行次数:0
运行
复制
Integer g = new Integer(100);
Integer h = new Integer(100);
System.out.println(g == h);    // false(不同对象)

四、与基本类型混用的风险

Integerint 比较时,Integer 会自动拆箱为 int,此时 == 比较的是值,可能掩盖对象比较的问题,但需注意 空指针风险

代码语言:javascript
代码运行次数:0
运行
复制
Integer i = null;
int j = 100;
System.out.println(i == j);   // 抛出 NullPointerException(自动拆箱导致)

五、总结与建议

<!--br {mso-data-placement:same-cell;}--> td {white-space:nowrap;border:0.5pt solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

场景

== 结果

推荐方法

缓存范围内自动装箱(-128~127)

可能为 true

仍优先用 equals

缓存范围外自动装箱

FALSE

必须用 equals

显式 new 创建对象

FALSE

必须用 equals

与 int 比较

自动拆箱(值比较)

需判空避免异常

最佳实践

  1. 始终使用 equals() 比较 Integer 对象的值
  2. 涉及 null 时,优先用 Objects.equals(a, b) 避免空指针
  3. 避免混用 == 和自动拆箱,尤其是对可能为 nullInteger 对象

通过理解这些机制,可避免因 == 误用导致的逻辑错误和性能问题

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、引用比较 vs 值比较
  • 二、缓存机制导致的陷阱
  • 三、显式 new 的干扰
  • 四、与基本类型混用的风险
  • 五、总结与建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档