У меня есть этот код:В чем разница между этими двумя почти идентичными блоками кода?
int i = 128;
Integer a = i;
Integer b = i;
System.out.println("a==i " + (a == i)); // true
System.out.println("b==i " + (b == i)); // true
System.out.println("a==b " + (a == b)); // false
System.out.println("equals ->" + a.equals(i)
+ b.equals(i)
+ a.equals(b)); // true, true, true
Тогда я изменить свою переменную я быть 127:
int i = 127;
Integer a = i;
Integer b = i;
System.out.println("a==i " + (a == i)); // true
System.out.println("b==i " + (b == i)); // true
System.out.println("a==b " + (a == b)); // true !!! look here
System.out.println("equals ->" + a.equals(i)
+ b.equals(i)
+ a.equals(b)); // true, true, true
Я не понимаю, почему «правда» изменено на «ложь»?
Также 'значения Long' между -128 и 127. –
@PeterLawrey ти для комментария. где я могу найти, что сказано о Лонг. что в Java 7? – Willmore
Javadoc говорит «public static Long valueOf (long l) Возвращает длинный экземпляр, представляющий заданное длинное значение. Если новый длинный экземпляр не требуется, этот метод обычно должен использоваться в предпочтении конструктору Long (long), так как этот метод, вероятно, даст значительно лучшую производительность пространства и времени за счет кэширования часто запрашиваемых значений. Обратите внимание, что в отличие от соответствующего метода в классе Integer * этот метод не требуется для кэширования значений в определенном диапазоне *. " –