比较Integer对象与int

Tre*_*vor 7 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);
            x++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是什么原因?我认为Integer会比较没问题.

谢谢.

Vla*_*nov 17

因为当你做对象时=比较对象它会比较引用.一般情况下两个对象之间的引用是不同的.

比较整数时,它总是比较基元,假设不是引用(没有对象),而是值.

因此,如果您想使用Integer,则必须对它们使用equals().

此外,如果您的值介于0和255之间,则Integer之间的比较可以正常工作,因为缓存.

你可以在这里阅读:http://download.oracle.com/javase/tutorial/java/data/numberclasses.html

  • 另一方面,如果在Integer和int之间使用!=,则自动取消装箱将为您提供预期的结果. (5认同)

Boz*_*zho 6

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

只比较基元 ==

这就是规则,除了一些特殊情况下,== 可以被用来比较的对象.但即便如此,这也是不可取的.