Java 比较整数对象与整数对象

Java 比较整数对象与整数对象,java,Java,我通过以下方式将Integer更改为int,修复了无止境循环: public class IntTest { public static void main(String[] args) { Integer x=-1; Integer total=1000; while(x != total){ System.out.println("x =" + x + "total ="+ total);

我通过以下方式将Integer更改为int,修复了无止境循环:

public class IntTest {
    public static void main(String[] args) {
        Integer x=-1;
        Integer total=1000;

        while(x != total){
            System.out.println("x =" + x + "total ="+ total);
            x++;
        }
    }
}
这样做的正当理由是什么?我想整数比较没问题


谢谢。

问题在于Integer是一个类,因此,即使是比较也像其他任何类一样——使用.equals()方法。如果使用==进行比较,则比较两个不同实例中始终不同的引用。
原语类型
int
不是一个类,而是一个Java内置类型,因此比较由编译器专门处理,并按预期工作。

因为当您在对象上比较它比较引用。一般情况下,两个对象之间的引用是不同的

当比较int时,它总是比较基本体,比如说不是引用(没有对象),而是值

所以,如果您想使用Integer,必须对其使用equals()

此外,如果您的值介于0和255之间,则整数之间的比较工作正常,因为存在缓存


您可以在这里阅读:

Integer是围绕Java原语类型int的类包装器。它们不是一回事。您应该使用int而不是Integer,除非您有一个有效的理由(例如
ArrayList

Integer
是一个
对象,并且对象与
.equals(…)
进行比较)

只有原语与
=


这是一条规则,除了一些例外情况外,
=
可以用于比较对象。但即使这样,也不可取。

可以使用Integer.intValue()如果您确实需要使用整数,则可以获取用于比较的int值。

另一方面,如果您在整数和int之间使用!=,则自动取消装箱将给出您期望的结果。将原语和对象(如int和Integer)进行比较如何?在Java中是否可能,您也可以将“x!=total”更改为“total!=x”结账