为什么使用==和equals()比较整数值会得出不同的结果?

时间:2018-09-17 03:09:43

标签: java java-8

Integer i = 11;
Integer j = 11;
Integer h = 10000;
Integer k = 10000;
System.out.println((i==j));
System.out.println((i.equals(j)));
System.out.println((h==k));
System.out.println((h.equals(k)));

输出为: 真正 真正 假 是

实际上对于h == k也应为true,请解释。

1 个答案:

答案 0 :(得分:1)

因为==检查对象引用,而equals检查实际值。他们不能保证产生相同的结果。

在某些情况下,它们的确给出相同的结果,但这是因为JVM是interning的一些Integer对象。意思是,它维护整数对象的缓存。因此,例如,如果您要求Integer值为10,则它可能返回相同的对象实例。但是不能保证要插入哪些值。因此,建议始终使用equals而不是依赖==