суббота, 17 декабря 2011 г.

Integer пул(pool)

Наверняка вам известно, что при сравнении двух объектов в 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) объект, так что ссылки разные.
Вот и всё.

1 комментарий:

  1. Здравствуйте!
    С наступающим новым годом!
    Блог очень интересный но хотелось бы видеть не только комментарии, а что то типа обратной связи или небольшого форума для обсуждения тем. Также чтобы знать создателя блога ,что бы знать к кому обращаться.
    Я только начал изучать язык Java и поэтому хотел бы больше информации для "самых маленьких" и заданий что то сделать самим ,конечно после обьяснения темы.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.