当前位置: 首页 > 知识库问答 >
问题:

比较整数对象[重复]

宁弘亮
2023-03-14

我有以下代码:

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

但是将整数对象的类型更改为int将产生不同的输出,例如:

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。是否正确

共有3个答案

姜煌
2023-03-14

Integer==此处应用了自动装箱(因此在比较之前Integer转换为int),因此为true。。但是Integer==此处的Integer对象比较,因此引用不同,因此为false。。

孟新知
2023-03-14

整数对象是对象。这听起来合乎逻辑,但却是问题的答案。对象在Java中使用new关键字生成,然后存储在内存中。比较时,比较对象的内存位置,而不是对象的值/属性。

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

new Integer(1)==new Integer(1)返回false,而new Integer(1)。等于(新整数(1))返回true

ints是java的一种基本类型。创建int时,引用的只是值。在Java中比较任何基元类型时,所比较的只是值,而不是内存位置。这就是为什么5==5总是返回true。

整数对象与基元类型进行比较时,如果可能,该对象将强制转换为基元类型。使用整数int这是可能的,因此可以对它们进行比较。这就是为什么Integer(1)。等于(1)返回true。

呼延聪
2023-03-14

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

对于基本类型,=检查值是否相等。

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

编辑:如果一个操作数为基元类型,而另一个操作数为引用类型,且未绑定到合适的基元类型,=将比较值,而不是引用。

 类似资料:
  • 我正在用下面的代码比较两个整数对象....为什么输出是“Both Integer are not equal...”虽然我在某处读到过,Integer或int将只在-128到127的范围内相等。为什么不是128?

  • 上述情况导致 上述条件返回。 为什么会这样?这些片段之间有什么区别?

  • 如果两个集合包含相同的对象,如何进行比较? 当然会打印出假的。

  • 我发现了一个有趣的事实,但我不知道是怎么发生的。

  • 如果两个集合包含相同的对象,如何进行比较? 当然会打印错误。

  • 我正在尝试创建一个二进制搜索程序,该程序可以使用各种类型的变量(int、float、string等)来查看数组中是否存在元素。我正试图找出如何比较变量。下面是我正在使用的内容的草图: 我甚至不确定使用对象是否是最好的方法。