Java相等运算符

时间:2013-07-08 13:17:05

标签: java memory

有什么区别?

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);
    }

结果:真

我们可以尝试一下!

5 个答案:

答案 0 :(得分:2)

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

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

或者,使用int代替Integer,因为Integer是对象。

答案 1 :(得分:2)

根据JLS 5.1.7

  

如果装箱的值p为true,false,一个字节,范围为\ u0000到\ u007f的字符,或 int或-128到127之间的短号,则让r1和r2是p的任意两次拳击转换的结果。始终是r1 == r2。

的情况

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

答案 2 :(得分:1)

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

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

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;

答案 3 :(得分:1)

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

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

对于第一个例子,大量放弃实习,ergo不同的引用,并且它的评估结果为false。

在第二个中,整数是相同的参考,比较是真的。

答案 4 :(得分:0)

你可以简单地使用int而不是Integer,它会起作用。否则请参考关于== vs equals()的任何其他答案。