在java中将两个Integer对象与==进行比较

时间:2014-09-18 05:20:54

标签: java

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

2 个答案:

答案 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将返回一个相同的对象。我现在无法对此进行验证,但这可以解释您所面临的行为。