Да и да.
Вы не можете на самом деле положить int
в Object[]
. То, что вы делаете, использует функцию Java, называемую autoboxing , в которой примитивный тип, такой как int
, автоматически переводится в соответствующий класс-оболочку (в данном случае Integer
) или наоборот, когда необходимо.
Вы можете узнать больше об этом здесь .
Edit:
Как указывает Джеспер в комментарии ниже, ответ на ваш первый вопрос на самом деле не "да", а "это зависит от значения a
". Вызов конструктора Integer(int)
, как в (2), всегда приведет к созданию нового Integer
объекта и его помещению в массив.
В (1), однако, процесс автобоксирования не будет использовать этот конструктор; по сути, это будет Integer.valueOf(a)
. Этот может создать новый Integer
объект или может вернуть ранее существующий кэшированный Integer
объект для экономии времени и / или памяти, в зависимости от значения a
. В частности, значения от -128 до 127 кэшируются таким образом.
В большинстве случаев это не будет иметь существенного значения, поскольку Integer
объекты являются неизменяемыми. Если вы создаете очень большое количество Integer
объектов (значительно больше 256 из них) и большинство из них находятся между -128 и 127, ваш пример (1), вероятно, будет быстрее и будет использовать меньше памяти, чем (2) .