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

Java包装类比较疑问:为何<=返回true而==返回false?

问题解析:Integer.valueOf比较时==和<=结果不同的原因

这其实是Java里Integer缓存机制和运算符行为差异导致的典型小坑,我给你一步步拆解清楚:

  • 为什么==输出false?
    Java的Integer.valueOf()方法自带缓存逻辑:它会预先创建并缓存**-128到127之间的Integer对象。当你传入的数值在这个范围内时,每次调用都会返回同一个缓存好的对象引用;但如果数值超出这个范围(比如这里的5000),每次调用都会生成一个全新的Integer对象。
    而==在比较对象类型时,本质是比较
    对象的内存地址(引用)**。两次Integer.valueOf("5000")生成的是两个完全不同的对象,它们的引用地址不一样,所以==的结果就是false。

  • 为什么<=输出true?
    当你使用<=、>=这类数值比较运算符时,Java会自动触发**自动拆箱(unboxing)**操作——把Integer包装类对象转换成对应的int基本类型。这时候比较的就不再是对象引用了,而是两个int类型的数值5000和5000,数值相等的情况下<=自然返回true。

举个小验证例子:如果把代码里的5000换成100(在缓存范围内),那Integer.valueOf("100") == Integer.valueOf("100")就会返回true,因为两次返回的是同一个缓存对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:44