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,请解释。
答案 0 :(得分:1)
因为==
检查对象引用,而equals
检查实际值。他们不能保证产生相同的结果。
在某些情况下,它们的确给出相同的结果,但这是因为JVM是interning
的一些Integer对象。意思是,它维护整数对象的缓存。因此,例如,如果您要求Integer值为10,则它可能返回相同的对象实例。但是不能保证要插入哪些值。因此,建议始终使用equals
而不是依赖==
。