Загрузка страницы..
Integer пул(pool)
Наверняка вам известно, что при сравнении двух объектов в Java на == обычно получается не тот результат, что нужен, т.к. идет сравнение ссылок на объекты, а не данных этих объектов.
2015-02-19T10:02 19 февр. 2015 10:02
Просмотров: 1939

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

Вот и всё.



Комментарии: 0

Коментарий пока нет, стань первым!

Добавить комментарий

Яндекс.Метрика Яндекс.Метрик