比较Integer对象[复制](Comparing Integer objects [duplica

2019-06-18 06:40发布

这个问题已经在这里有一个答案:

  • 如何正确使用Java比较两个整数? 8个回答

我有以下代码:

public class Test {

    public static void main(String[] args) {

        Integer alpha = new Integer(1);
        Integer foo = new Integer(1);

        if(alpha == foo) {
            System.out.println("1. true");
        }

        if(alpha.equals(foo)) {
            System.out.println("2. true");
        }

    } 

}

输出如下:

2. true

然而改变的类型Integer objectint将产生不同的输出,例如:

public class Test {

    public static void main(String[] args) {

        Integer alpha = new Integer(1);
        int foo = 1;

        if(alpha == foo) {
            System.out.println("1. true");
        }

        if(alpha.equals(foo)) {
            System.out.println("2. true");
        }

    } 

}

新的输出:

1. true
2. true

这怎么可能呢? 为什么不是第一示例代码输出1. true

Answer 1:

引用类型, ==检查引用是否相等,即它们是否指向同一个对象。

对于原始类型, ==检查值是否相等。

java.lang.Integer是引用类型。 int是一个基本类型。

编辑:如果一个操作数是原始类型的,另一个即unboxes到合适的原始类型引用类型的, ==将比较值,而不是引用。



Answer 2:

Integer对象是对象。 这听起来合乎逻辑的,但就是问题的答案。 对象是使用Java中取得new关键字,然后存储在存储器中。 比较时,您所比较的对象,而不是值/对象的属性的存储位置。

使用.equals()方法,实际上是比较值/对象的属性,而不是他们在内存中的位置:

new Integer(1) == new Integer(1)返回false ,而new Integer(1).equals(new Integer(1))返回true


int s为基本类型的java。 当你创建一个int,所引用的所有的值。 当你在Java中比较任何原始类型,所有比较的是价值,而不是存储位置。 这就是为什么5 == 5总是返回true。

当你比较一个Integer对象基本类型,该对象被强制转换为原始类型,如果可能的话。 随着Integerint这是可能的,所以他们相比。 这就是为什么Integer(1).equals(1)返回true。



Answer 3:

整数== INT在此自动拳击施加(以便整数转换对比之前为int),所以真..但这里整数==整数对象比较,以便参考是不同的,所以假..



Answer 4:

什么,你会使用new Integer(1)创建新的对象,它创建的每个即使它具有相同的值时完全不同的对象。 该“==”检查对象是相同的,而不是数据值。 在你的情况,你可能已经检查了值,如下所示:

if(alpha.intValue() == foo.intValue()) {
 // 
}


Answer 5:

第一个例子:使用对象之间的==操作符检查参考平等,因为你在比较两个不同的对象,他们不相等。

第二个例子:当使用包装器类型(整型,长整型,等)和数字类型(整型,长等)的包装类型是装箱和所述相等性检查在两个原始数字类型之间完成之间的==(即INTINT之间)。 拆箱是二进制数值提升的一部分,在这里阅读更多: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2



文章来源: Comparing Integer objects [duplicate]
标签: java oop object