Java ==奇怪的行为

时间:2014-01-21 06:40:18

标签: java equality

我想在我的应用程序中检查Integer相等,但遇到了一个奇怪的行为。在某些时候我的应用程序正常工作,但在某些时候它失败了。所以我刚刚在这里写了一个测试代码

public class EqualityTest {

     public static void main(String args[]) {
           Integer a = 100;
           Integer b = 100;
           Integer c = 1000;
           Integer d = 1000;
           if (a == b) {
                 System.out.println("a & b are Equal");
           }
           else {
                 System.out.println("a & b are Not Equal");
           }

           if (c == d) {
                 System.out.println("c & d are Equal");
           } else {
                 System.out.println("c & d are Not Equal");
           }
     }
}

输出

a & b are Equal
c & d are Not Equal

这里我的问题是为什么c和d不相等?

4 个答案:

答案 0 :(得分:6)

Integer使用范围为-128到127的小值的 缓存 ,因此您可以为小值(例如100)获得相同的实例。

对于此范围之外的值,将创建并返回新的Integer实例。

答案 1 :(得分:3)

Integer是可变类,在缓存中保持-128到127个整数。所以==将适用于整数-128 <= i <= 127

每次使用此范围创建Integer时,它将返回先前创建的相同对象。

对于 Java 7 ,可以使用系统属性实现:

-Djava.lang.Integer.IntegerCache.high=<size>

答案 2 :(得分:-3)

整数是一个对象。 你应该使用equal而不是== 像

if(a.equal(b)){
...
}

答案 3 :(得分:-4)

        Integer a = 100;
        Integer b = 100;
        Integer c = 1000;
        Integer d = 1000;
        if (a.equals(b)) {
            System.out.println("a & b are Equal");
        }
        else {
            System.out.println("a & b are Not Equal");
        }
        if (c.equals(d)) {
            System.out.println("c & d are Equal");
        } else {
            System.out.println("c & d are Not Equal");
        }

==表示他们的指针或引用相等,而不是值相等。你应该调用.equals方法