2016-06-29 3 views
-1

Я использую autoboxing и unboxing в Java. Тип возврата для Autoboxing прекрасен. без вопросов. но для unboxing возвращаемый тип приходит как Integer вместо int. пожалуйста, найти мое кодирование ниже и, пожалуйста, дайте мне знать, пожалуйстаТип возвращаемого значения не возвращается как int при выполнении unboxing

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 
+0

@CSK Извините? –

+0

В чем вопрос? Я не уверен, что понимаю, вы, кажется, ответили сами: автобоксинг - это механизм, который здесь играет. – Tunaki

+0

Вы назначили x объект Integer, почему вы думаете, что это int – CSK

ответ

0

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

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

int newX = x + 5; 

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

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

Source

1

Оно приходит в Integer, потому что вы сохраняете результат x+5 к x, который является Integer, поэтому бокс происходит снова.

Чтобы увидеть, что тип является int вы должны печатать непосредственно тип выражения x+5, но вы не можете сделать это, так как это распакованный к int, и вы не можете вызвать метод на примитивного типа.

0

Прежде всего, тип переменной фиксирован. В вашем примере тип x - java.lang.Integer, и он не может измениться на int.

Тестирование, которое вы выполняете, недействительно; вы никогда не увидите тип x изменений на все, кроме java.lang.Integer.

Когда вы x = x + 5;, то ряд вещей, которые происходят:

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

Переменная x объявляется Integer. Таким образом, в строке x = x + 5; он автоматически переименовывается. Если вы хотите этого избежать, используйте int y = x + 5;.Но помните, что вы не можете позвонить .getClass() на примитивных типах.

+0

Спасибо, чувак. Теперь я понял, что допустил ошибку. спасибо всем – Ashok

Смежные вопросы