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
相关产品推荐
相关产品推荐

