Использование int
и Integer
"взаимозаменяемо" называется autoboxing .Эта функция была введена в Java 5. До этого ваш пример кода не компилировался бы.Вместо этого вам нужно написать что-то вроде этого:
Integer b = Integer.valueOf(42); // or new Integer(42);
int a = b.intValue();
или
int d = 12;
Integer c = Integer.valueOf(d); // or new Integer(d);
Это довольно многословно, поэтому был введен автобоксЭто немного волшебства компилятора, чтобы облегчить жизнь программисту.
Технически сами int
и Integer
не являются взаимозаменяемыми, и один не может использоваться там, где требуется другой.Тем не менее, автобокс позволяет неявное преобразование между ними.
В качестве примечания, есть один случай, когда автобокс (особенно распаковка) завершается неудачей.Если ваш код попытается автоматически установить нулевое значение, вы получите NullPointerException
во время выполнения, например:
Integer b = null;
int a = b; // NullPointerException here!
Просто что-то, о чем нужно знать ...