Integer i = new Integer(0);
Integer j = new Integer(0);
while(i <= j && j <= i && i !=j){
System.out.println(i);
}
Почему это выполняется во время цикла? Я понимаю, что i != j
. Но отдельно, как i <= j
, так и j <= i
возвращает true. Зачем? И разве это не значит, что i == j
? В этом случае цикл while не должен выполняться ни разу. Но для бесконечного цикла. Почему это так?Как сравнить два целых объекта?
Так что даже если математически, == и <=, как кажется, похожи в сравнении количество сравниваемых вещей. В Java это не так! Любая идея, почему так? Почему == сравнивает ссылки и <= фокусируется на фактическом количестве (intValue)? С общей точки зрения это выглядит довольно странно. Честно говоря, я думал, что <= должно каким-то образом сравнивать хэш-коды! – shanti
@shanti: Если вы используете 'int' вместо' Integer', все будет хорошо. Всякий раз, когда у вас есть операнды ссылочных типов, '==' будет сравнивать * ссылки *, а не содержимое - это так просто. Хотя Java можно было бы изменить, чтобы сделать '==' unbox там, где это уместно, это было бы нарушающим изменением - сравнение '==' было действительным с Java 1.0, что означает сравнение ссылок, как и между любыми двумя другими ссылками. –
имеет смысл. В принципе, в случае классов-оболочек == or! = Проверяет ссылки, но <= or > = проверяет фактические примитивные значения, содержащиеся в объекте. Большое спасибо за быстрое и четкое реагирование. :) – shanti