【问题标题】:Java equality operator [duplicate]Java相等运算符[重复]
【发布时间】:2013-07-08 13:17:04
【问题描述】:

有什么区别?

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

结果:真

我们可以试试!

【问题讨论】:

    标签: java memory


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      根据JLS 5.1.7

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 不,你不能确定Integer i1 = 1000;Integer i2 = 1000; 指的是不同的对象。
        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2014-03-27
            • 1970-01-01
            • 1970-01-01
            • 2012-02-21
            • 2021-09-10
            • 1970-01-01
            • 1970-01-01
            • 2012-08-23
            • 2011-11-06
            相关资源
            最近更新 更多