Тип возврата не возвращается как 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;затем происходит ряд вещей:

  1. x на правой стороне = распакован в int
  2. Значение 5 добавлен
  3. Результат + операция снова упакована в Integer и назначен x

Ваша проблема в том, что Integer x сохраняет ссылку на объект и никогда не присваивается примитиву.

Это должно дать вам правильную распаковку

int newX = x + 5;

Преобразование объекта типа оболочки (Integer) в соответствующее ему примитивное (int) значение называется распаковкой. Компилятор Java применяет распаковку, когда объект класса-обёртки:

  • Передается в качестве параметра в метод, который ожидает значение соответствующего типа примитива.
  • Присваивается переменной соответствующего примитивного типа.

Источник

Другие вопросы по тегам