我通过在下面将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会比较没问题。
感谢。
答案 0 :(得分:17)
因为你做的时候!=比较对象,它会比较引用。一般情况下两个对象之间的引用是不同的。
比较整数时,它总是比较基元,假设不是引用(没有对象),而是值。
因此,如果你想使用Integer,你必须对它们使用equals()。
此外,如果您的值介于0和255之间,则Integer之间的比较可以正常工作,因为缓存。
您可以在此处阅读:http://download.oracle.com/javase/tutorial/java/data/numberclasses.html
答案 1 :(得分:6)
Integer
是Object
,对象与.equals(..)
进行比较
仅将基元与==
除了一些例外情况之外,这是规则,其中==
可以用于比较对象。但即使这样也不可取。
答案 2 :(得分:2)
问题是Integer是一个类,因此甚至可以像使用.equals()方法那样对任何其他类进行比较。如果使用==进行比较,则比较两个不同实例的总是不同的引用。
基本类型int
不是类,而是Java内置类型,因此比较由编译器专门处理并按预期工作。
答案 3 :(得分:2)
如果你真的需要使用Integer,你可以使用Integer.intValue()获取用于比较的int值。
答案 4 :(得分:1)
Integer是Java原型int的类包装器。它们不是同一件事。你应该使用int而不是Integer,除非你有正当理由(例如ArrayList<Integer> list
;