public class Problem {
public static void main(String args[]){
Integer a=200;
Integer b=200;
Integer c=20;
Integer d=20;
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(c==d);
System.out.println(c.equals(d));
}
}
输出
false
true
true
true
答案 0 :(得分:3)
Integer类在-128 to 127
之间保留本地缓存并返回相同的对象。所以,
Integer a=200; --> Internally converted to Integer.valueOf(200);
Integer b=200; // not same as a
Integer c=20;
Integer d=20; // same as c
Integer c=new Integer(20);
Integer d=new Integer(20);
c==d --> returns false; because you are comparing references.
答案 1 :(得分:1)
仅使用equals比较对象,除非您确实希望确保两者都是相同的对象而不仅仅是相等。 在盒装基元的情况下,我相信我已经看过一些基本数字被缓存,以便在这些情况下Java将返回一个相同的对象。我现在无法对此进行验证,但这可以解释您所面临的行为。