比较整数对象

yyyllmsg  于 2021-06-29  发布在  Java
关注(0)|答案(5)|浏览(310)

这个问题在这里已经有答案了

如何正确比较java中的两个整数(10个答案)
三年前关门了。
我有以下代码:

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 ?

bqucvtff

bqucvtff1#

第一个示例:在对象之间使用==运算符检查引用相等性,并且由于要比较两个不同的对象,因此它们不相等。
第二个示例:当在 Package 类型(integer、long等)和数字类型(int、long等)之间使用==时, Package 类型是未装箱的,并且在两个基本数字类型(即int和int之间)之间执行相等检查。拆箱是二进制数字提升的一部分,请阅读以下内容:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2

mccptt67

mccptt672#

integer==int这里应用了自动装箱(因此在比较之前integer转换为int)所以是真的。。但是integer==integer这里的对象比较所以作为引用是不同的所以是假的。。

pxyaymoc

pxyaymoc3#

你要用什么 new Integer(1) 要创建新对象,它每次都会创建一个完全不同的对象,即使它具有相同的值。“==”检查对象是否相同,而不是数据值。在您的情况下,可以按如下方式检查值:

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

vfhzx4xs4#

对于引用类型, == 检查引用是否相等,即它们是否指向同一对象。
对于基本类型, == 检查值是否相等。 java.lang.Integer 是引用类型。 int 是基元类型。
编辑:如果一个操作数是基元类型,而另一个操作数是引用类型,并取消绑定到合适的基元类型, == 将比较值,而不是引用。

wztqucjr

wztqucjr5#

整数对象是对象。这听起来合乎逻辑,但却是问题的答案。对象是使用 new 关键字,然后存储在内存中。比较时,比较的是对象的内存位置,而不是对象的值/属性。
使用 .equals() 方法,实际上是比较对象的值/属性,而不是它们在内存中的位置: new Integer(1) == new Integer(1) 退货 false ,而 new Integer(1).equals(new Integer(1)) 退货 true . int 是java的一种基本类型。创建int时,引用的只是值。在java中比较任何基元类型时,所比较的只是值,而不是内存位置。这就是为什么 5 == 5 总是返回true。
当你比较 Integer 对象转换为基元类型时,如果可能,将对象转换为基元类型。带着一个 Integer 和一个 int 这是可能的,所以他们是比较。这就是为什么 Integer(1).equals(1) 返回true。

相关问题