Поскольку Integer используется для нескольких небольших чисел, таких как перечисление, всегда существует один и тот же экземпляр. Но более высокие числа создают новые экземпляры Integer, а оператор == сравнивает их ссылки
Правильные ответы уже даны. Но просто добавлю два цента:
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. Это основная причина, по которой я ненавижу автобокс.
Прочтите это .
Java использует пул для Integer
s в диапазоне от -128 до 127.
Это означает, что если вы создаете Integer
с ] Целое число i = 42;
и его значение от -128 до 128, нет нового объекта создается, но возвращается соответствующий объект из пула. Вот почему c1
действительно идентично c2
.
( Я полагаю, вы знаете, что ==
сравнивает ссылки, а не значения, когда они применяются к объектам ).
Вы можете найти ответ здесь:
Самая странная языковая функция в 6-м ответе.
Edit: извините, не совсем ответ. Дело в том, что == сравнивает ссылки, а не значения, когда вы используете его с Integer. Но с int "==" означает равно.