Тип возврата не возвращается как int, когда мы выполняем распаковку
Я использую автобокс и распаковку в Java. Тип возврата для Autoboxing в порядке. без вопросов. но для распаковки возвращаемый тип приходит как Integer вместо int. пожалуйста, найдите мою кодировку ниже и, пожалуйста, дайте мне знать, пожалуйста
package JavaLearning;
public class NumberLearning {
public static void main(String[] args) {
Integer x=5; // AutoBoxing
System.out.println(x.getClass().getName()); // Display the type with the package name
System.out.println(x);
x=x+5; // Unboxing
System.out.println(x.getClass().getName()); // Display the type with the package name
System.out.println(x);
}
}
Выход:
java.lang.Integer
5
java.lang.Integer
10
4 ответа
Переменная x
объявлен Integer
, Так в линии x = x + 5;
это автоматически перезаписано. Если вы хотите избежать этого, используйте int y = x + 5;
, Но помните, что вы не можете позвонить .getClass()
на примитивных типах.
Это идет как Integer
потому что вы храните результат x+5
в x
который является Integer
, поэтому бокс происходит снова.
Чтобы увидеть этот тип int
Вы должны напечатать непосредственно тип выражения x+5
но вы не можете сделать это, так как он распакован в int
и вы не можете вызвать метод примитивного типа.
Прежде всего, тип переменной является фиксированным. В вашем примере тип x
является java.lang.Integer
и не может измениться в int
,
Тест, который вы делаете, недействителен; вы никогда не увидите тип x
изменить на что-то еще, чем java.lang.Integer
,
Когда вы делаете x = x + 5;
затем происходит ряд вещей:
x
на правой стороне=
распакован вint
- Значение
5
добавлен - Результат
+
операция снова упакована вInteger
и назначенx
Ваша проблема в том, что Integer x
сохраняет ссылку на объект и никогда не присваивается примитиву.
Это должно дать вам правильную распаковку
int newX = x + 5;
Преобразование объекта типа оболочки (Integer) в соответствующее ему примитивное (int) значение называется распаковкой. Компилятор Java применяет распаковку, когда объект класса-обёртки:
- Передается в качестве параметра в метод, который ожидает значение соответствующего типа примитива.
- Присваивается переменной соответствующего примитивного типа.