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 <= j
和j <= i
都返回true。为什么?这是不是意味着i == j
?在这种情况下,while循环不应该执行一次。但这是一个无限循环。为什么会这样?
答案 0 :(得分:4)
虽然可以在两个引用之间执行==
(并且,当双方都是Integer
时),<=
可以 - 但编译器将取消装箱。所以,你的代码相当于:
while (i.intValue() <= j.intValue() &&
j.intValue() <= i.intValue() &&
i != j)
现在,当i
和j
引用具有相同值的不同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;所以这里的引用所有的情况都是正确的,因此它会进入无限循环。