Peter Almazov писал(а):
Было бы интересно узнать версии и параметры окружения.
Не зависит.
Peter Almazov писал(а):
Если разберетесь в причинах, отпишитесь - интересно (сам я с ней не работаю
Ну, тут на самом деле всё очень просто. Integer, это вам не int, это вполне себе класс.
В яве == для ссылочных типов (ака классов) всегда сравнивает ссылки, а не содержимое классов.
Код:
Integer a = 420;
Тут происходит автобоксинг. Грубо говоря вызывается конструктор класса Integer с аргументом 420.
Код:
a<=b;
Тут произойдет автоанбоксинг. Т.е. из 'a' и 'b' (Integer) вытащат содержащееся там число (int) и сравнят.
Итак, a==b сравнит ссылки, a<=b сравнит содержимое.
Замечу, что Integer нифига не обычный класс, ибо вообще говоря, перегружать операторы в яве нельзя.
Однако остается непонятным почему при a=42 мы имеем таки true. Всё также просто -- по всей видимости объекты для всех чисел что влезают в один байт (-128 ... 127) уже созданы. Соответственно когда мы пишем Integer a = 42, ничего создаваться не будет, 'a' будет просто указывать на уже готовый объектик. Также как и Integer b = 42. Объект один и тот же, поэтому (a==b) == true.