Java 为什么使用==比较两个整数有时有效,有时无效?
我知道我在使用==时比较引用,这不是一个好主意,但我不明白为什么会发生这种情况Java 为什么使用==比较两个整数有时有效,有时无效?,java,types,comparison,Java,Types,Comparison,我知道我在使用==时比较引用,这不是一个好主意,但我不明白为什么会发生这种情况 Integer a=100; Integer b=100; Integer c=500; Integer d=500; System.out.println(a == b); //true System.out.println(a.equals(b)); //true System.out.println(c == d); //false System.out.println(c.equals(d)); //true
Integer a=100;
Integer b=100;
Integer c=500;
Integer d=500;
System.out.println(a == b); //true
System.out.println(a.equals(b)); //true
System.out.println(c == d); //false
System.out.println(c.equals(d)); //true
正在缓存-128到127之间的整数值 请参阅以下源代码:
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
私有静态类整型缓存{
私有整数缓存(){}
静态最终整数缓存[]=新整数[-128)+127+1];
静止的{
for(int i=0;i 如果(i>=-128&&iJava语言规范规定至少-128到127的包装器对象被自动装箱隐式使用的Integer.valueOf()
缓存和重用。缓存-128和127之间的整数(相同值的整数引用相同的对象
)比较a
和b
引用返回true
,因为它们是相同的对象
。你的c
和d
不在该范围内,因此它们的引用比较返回falsea==b返回true意味着a和b引用了相同的对象。c==d返回false意味着c和d不是相同的对象(即使它们的intValue是相同的)是绝对正确的Mastov…一开始我也感到困惑…请删除与此帖子相关的无关评论。感谢大家关闭此线程(我有点努力强调),这是非常重要的:寓意:当你对基础的int值感兴趣时,不要比较整数引用。使用.equals()或首先获取int值。是的,但这对每个人来说都很清楚,甚至在问题中都有说明!是的,它是重复的!!我在这里得到了完美的答案。谢谢大家。