Наверняка вам известно, что при сравнении двух объектов в Java на == обычно получается не тот результат, что нужен, т.к. идет сравнение ссылок на объекты, а не данных этих объектов.
Хм, давайте тогда посмотрим на следующий код и на результат его выполнения:
public class Temp { public static void main(String []args){ Integer i1 = 10; Integer i2 = 10; System.out.println(i1 == i2); } }
Как думаете, что он напечатает? А напечатает он true.
А вот еще один код:
public class Temp { public static void main(String []args){ Integer i1 = 130; Integer i2 = 130; System.out.println(i1 == i2); } }
Этот код уже выведет false.
На первый взгляд странно, не так ли? Сейчас объясню.
В Java есть пул(pool) целых чисел в промежутке [-128;127]. Т.е. если мы создаем Integer в этом промежутке, то вместо того, чтобы каждый раз создавать новый объект, JVM берет их из пула. Таким образом, в первом примере i1 и i2 указывают на один и тот же объект из пула, а во втором - создаются два разных объекта. Отсюда и результат. Стоит заметить, что в приведенных выше примерах не использовалось ключевое слово new.
Пример:
public class Temp { public static void main(String []args){ Integer i1 = new Integer(10); Integer i2 = new Integer(10); System.out.println(i1 == i2); } }
Результатом будет false. Тут мы уже явно говорим, что хотим создать новый(new) объект, так что ссылки разные.
Вот и всё.
Добавить комментарий