Хм, давайте тогда посмотрим на следующий код и на результат его выполнения:
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) объект, так что ссылки разные.
Вот и всё.
Здравствуйте!
ОтветитьУдалитьС наступающим новым годом!
Блог очень интересный но хотелось бы видеть не только комментарии, а что то типа обратной связи или небольшого форума для обсуждения тем. Также чтобы знать создателя блога ,что бы знать к кому обращаться.
Я только начал изучать язык Java и поэтому хотел бы больше информации для "самых маленьких" и заданий что то сделать самим ,конечно после обьяснения темы.