Вопрос о Java об автоупаковке и объектном равенстве / идентификационные данные [дубликат]

16
задан Sean Patrick Floyd 26 August 2010 в 10:12
поделиться

5 ответов

Поскольку Integer используется для нескольких небольших чисел, таких как перечисление, всегда существует один и тот же экземпляр. Но более высокие числа создают новые экземпляры Integer, а оператор == сравнивает их ссылки

2
ответ дан 30 November 2019 в 15:28
поделиться

Правильные ответы уже даны. Но просто добавлю два цента:

Integer b1 = 1000, b2 = 1000;

Это ужасный код. Объекты должны быть инициализированы как объекты с помощью конструкторов или фабричных методов. Например.

 // let java decide if a new object must be created or one is taken from the pool
Integer b1 = Integer.valueOf(1000);

или

 // always use a new object
 Integer b2 = new Integer(1000);

Этот код

Integer b1 = 1000, b2 = 1000;

, с другой стороны, подразумевает, что Integer был примитивом, но это не так. На самом деле вы видите ярлык для

Integer b1 = Integer.valueOf(1000), b2 = Integer.valueOf(1000);

, а Integer объединяет только объекты от -127 до 127, поэтому в этом случае он создаст два новых объекта. Итак, хотя 1000 = 1000, b1! = B2. Это основная причина, по которой я ненавижу автобокс.

11
ответ дан 30 November 2019 в 15:28
поделиться

Прочтите это .

Java использует пул для Integer s в диапазоне от -128 до 127.

Это означает, что если вы создаете Integer с ] Целое число i = 42; и его значение от -128 до 128, нет нового объекта создается, но возвращается соответствующий объект из пула. Вот почему c1 действительно идентично c2 .

( Я полагаю, вы знаете, что == сравнивает ссылки, а не значения, когда они применяются к объектам ).

38
ответ дан 30 November 2019 в 15:28
поделиться

Вы можете найти ответ здесь:

Самая странная языковая функция в 6-м ответе.

Edit: извините, не совсем ответ. Дело в том, что == сравнивает ссылки, а не значения, когда вы используете его с Integer. Но с int "==" означает равно.

2
ответ дан 30 November 2019 в 15:28
поделиться

Ответ, который вам нужен: здесь

0
ответ дан 30 November 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: