You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Integer类型用==比较部分测试用例失败原因求解

测试用例失败原因解析

核心原因是Java的Integer类缓存机制导致引用判断逻辑不符合预期:

  • ArrayList<Integer>存储的是Integer引用类型对象,你用==做判断时,实际比较的是两个对象的内存地址是否一致,而非对象存储的数值是否相等。
  • Java 8默认会对-128~127区间的Integer对象做缓存,该区间内的数值自动装箱得到的Integer实例都是复用缓存中的同一个对象,所以用==判断地址也会返回true,这就是你本地可见测试用例全部通过的原因——可见用例的元素值都落在缓存区间内。
  • 你题目中给出的元素取值范围最大到10^9,当数值超过127时,每次自动装箱都会生成全新的Integer对象,哪怕两个对象存储的数值完全相同,内存地址也会不同,此时==判断就会返回false,导致逻辑错误,提交失败的6个测试用例都包含超出缓存区间的数值。

修改后逻辑生效的原因:
Integer.compare(int x, int y)方法执行时会先把入参的Integer对象自动拆箱为基础类型int,直接比较数值大小,返回0即代表数值相等,完全不受Integer缓存机制的影响,所以所有测试用例均可正常通过。

补充:你也可以用list1.get(i).equals(list2.get(i))实现相同的数值比较效果,该方法是Integer类重写的、专门用于比较内部存储数值的方法。

内容的提问来源于stack exchange,提问作者kakashiOfSharingan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:30:04