如何比较两个整数对象?

时间:2015-06-30 17:45:21

标签: java integer integer-arithmetic

Integer i = new Integer(0);
Integer j = new Integer(0);
while(i <= j && j <= i && i !=j ){
    System.out.println(i);
}

为什么这个while循环执行? 我理解i != j。但另外,i <= jj <= i都返回true。为什么?这是不是意味着i == j?在这种情况下,while循环不应该执行一次。但这是一个无限循环。为什么会这样?

4 个答案:

答案 0 :(得分:4)

虽然可以在两个引用之间执行==(并且,当双方都是Integer时),<=可以 - 但编译器将取消装箱。所以,你的代码相当于:

while (i.intValue() <= j.intValue() &&
       j.intValue() <= i.intValue() &&
       i != j)

现在,当ij引用具有相同值的不同Integer个对象时,将满足所有这些条件 - 因此循环将继续执行。

答案 1 :(得分:1)

尝试:

while(!i.equals(j))

您正在将两个整数对象与==而不是两个原始int值进行比较。也就是说,&#34;整数&#34;是一个对象,而int是一个原始值。在对象上执行!=对于Integer(0)和Integer(0)将返回true,因为它们确实不相等 - &gt;每个都在内存中有一个单独的位置。

&#34; new&#34;运算符在堆上分配动态内存。 要使==工作,您可以将类型更改为int,如:

int i = 0;
int j = 0;

这将直接比较这些值。

如果您使用&#34;整数,&#34;另一种方法是使用.compareTo方法,它将比较对象的值

答案 2 :(得分:0)

像对象==这样的对象的

Integer会比较引用。 <=>=将取消装箱Integer个对象并以数字方式比较值,这是完全不同的。

在这种情况下,将==!=视为与Integer s的值完全无关。

答案 3 :(得分:0)

&#34;&LT; =&#34;正在比较值,而#34;!=&#34;所以这里的引用所有的情况都是正确的,因此它会进入无限循环。