Целочисленные объекты
Integer x = 1, y = 1;
System.out.println(x==y); // true, why?
Это происходит потому, что для значений в диапазоне byte
(от -128 до +127) java использует кэшированные объекты Integer, хранящиеся во внутреннем классе Integer , IntegerCache . Каждый раз, когда объект Integer создается со значением в диапазоне от -128 до +127, возвращается один и тот же объект (вместо создания new объекта).
И наоборот, для значений вне диапазона byte
сравнение составляет false
:
Integer x = 999, y = 999;
System.out.println(x==y); // false
Объекты класса
String s1 = "a", s2 = "b";
System.out.println(s1.getClass() == s2.getClass()); // true. Why?
Это верно, потому что класс обоих объектов равен String
, и существует только одна копия каждого объекта класса на JVM (это похоже на синглтон). объект класса , возвращаемый из getClass()
каждой строки, равен того же объекта класса (String.class
).