比较Integer对象与int

时间:2010-10-27 17:55:45

标签: 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++;
        }
    }
}

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

感谢。

5 个答案:

答案 0 :(得分:17)

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

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

因此,如果你想使用Integer,你必须对它们使用equals()。

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

您可以在此处阅读:http://download.oracle.com/javase/tutorial/java/data/numberclasses.html

答案 1 :(得分:6)

IntegerObject,对象与.equals(..)进行比较

仅将基元与==

进行比较

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

答案 2 :(得分:2)

问题是Integer是一个类,因此甚至可以像使用.equals()方法那样对任何其他类进行比较。如果使用==进行比较,则比较两个不同实例的总是不同的引用。 基本类型int不是类,而是Java内置类型,因此比较由编译器专门处理并按预期工作。

答案 3 :(得分:2)

如果你真的需要使用Integer,你可以使用Integer.intValue()获取用于比较的int值。

答案 4 :(得分:1)

Integer是Java原型int的类包装器。它们不是同一件事。你应该使用int而不是Integer,除非你有正当理由(例如ArrayList<Integer> list;