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循环不应该执行一次。但它无限循环。这是为什么?如何比较两个整数对象?
因此,即使在数学上,==和<=,都似乎是在比较相似比较事物的数量。在Java中并不是这样!任何想法为什么如此?为什么==比较引用和<=关注实际数量(intValue)?从一般的角度来看,这看起来很奇怪。说实话,我认为<=必须以某种方式比较hashCodes! – shanti
@shanti:好吧,如果你用'int'而不是'Integer',一切都会好起来的。无论何时你有引用类型的操作数,'=='都会比较*引用*而不是内容 - 它就像那样简单。尽管Java可以在适当的时候改变为'=='开箱,但这将是一个突破性改变 - 自从Java 1.0以来,“==”比较一直是有效的,这意味着参考比较就像在任何其他两个参考之间一样。 –
是有道理的。所以基本上,在包装类的情况下,==或!=检查引用,但是<= or > =检查包含在对象中的实际原始值。非常感谢您迅速,清楚地回复。 :) – shanti