1

有什么区别?

public static void main(String[] args){
            Integer integer1=1000;
            Integer integer2=1000;
            System.out.println(integer1==integer2);
        }

结果:假

public static void main(String[] args){
        Integer integer1=100;
        Integer integer2=100;
        System.out.println(integer1==integer2);
    }

结果:真

我们可以试试!

4

5 回答 5

2

-128 到 127 之间的所有整数都被缓存,因为它们被更频繁地使用。如果您希望第一个示例正常工作,请尝试:

    public static void main(String[] args){
        Integer integer1=1000;
        Integer integer2=1000;
        System.out.println(integer1.equals(integer2));
    }

或者,使用 anint而不是 an Integer,因为 anInteger是一个对象。

于 2013-07-08T13:18:08.977 回答
2

根据JLS 5.1.7

如果被装箱的值 p 是 true、false、一个字节、一个在 \u0000 到 \u007f 范围内的字符,或者一个介于 -128 和 127 之间的 int 或短数字,那么让 r1 和 r2 是任意两个装箱转换的结果p。r1 == r2 总是如此。

-128 到 127之间的整数在 Java 中汇集。看看这个源代码:

于 2013-07-08T13:19:08.790 回答
1

-128 到 127 之间的整数在 java 中被汇集。

下面是自动装箱的结果,并创建了 2 个不同的对象:

Integer integer1=1000;integer1 and integer2 are referring to 2 different objects
Integer integer2=1000;

Integer integer1=100;both refer to the same because of pooling
Integer integer2=100;
于 2013-07-08T13:18:19.313 回答
1

你有Integer一个参考类型。==仅在与对象一起使用时比较引用。

由于不可变性和实习/池化,整数的小值(至少在 [-128, 127] 范围内,尽管这是特定于实现的,不应依赖)可以设置为引用相同的对象。

对于第一个例子,大量放弃实习,因此不同的参考,它评估为假。

第二,Integers是同一个引用,比较是真的。

于 2013-07-08T13:19:22.777 回答
0

您可以简单地使用 int 而不是 Integer 并且它会起作用。否则请参阅有关 == vs equals() 的任何其他答案。

于 2013-07-08T13:19:52.607 回答