2015-11-24 1 views
5

В чем разница между бокса и AutoBoxing в Java? В нескольких книгах по сертификации Java используются два таких термина. Они ссылаются на то же, что и на бокс?В чем разница между бокса и AutoBoxing в Java?

+0

это разблокировка, а не бокс – Bikku

+1

@UUIIUI есть – fge

+2

@Tunaki Ну, не обязательно.Это можно рассматривать как бокс: 'Integer i = new Integer (1);' и это autoboxing 'Integer i = 1;'. Однако это просто нерелевантная семантика. – Kayaman

ответ

10

Бокс механизм (т.е. от int до Integer); autoboxing - это особенность компилятора, с помощью которого он генерирует для вас код бокса.

Например, если вы пишете в коде:

// list is a List<Integer> 
list.add(3); 

, то компилятор автоматически генерирует код бокс для вас; "конец результата" в коде будет:

list.add(Integer.valueOf(3)); 

примечание о том, почему Integer.valueOf() и не new Integer(): в основном, потому что JLS так говорит :) Цитирование section 5.1.7:

Если значение p в коробке - true, false, байт или символ в диапазоне \ u0000 to \ u007f или int или короткий номер между -128 и 127 (включительно), затем пусть r1 и r2 будут результатами любых двух ящиков in конверсии стр. Всегда бывает, что r1 == r2.

И вы не можете выполнить это требование, если используете «простой» конструктор. Заводской метод, такой как Integer.valueOf(), может.

+0

Прекрасно положил. .. –

+0

С хорошим примером .. :) –

5

В моем понимании, «Бокс» означает «Явное построение обертки вокруг примитивного значения». Например:

int x = 5; 
Integer y = new Integer(x); //or Integer.valueOf(x); 

Между тем, "Autoboxing" означает "неявно построения оболочки вокруг примитивного значения". Например:

Integer x = 5; 
0

Autoboxing является автоматическое преобразование, что компилятор Java делает между примитивными типами и их соответствующий объект класса-оболочки. Например, преобразование int в Integer, double в Double и т. Д. Если преобразование идет другим путем, это называется unboxing.

ref...

0
  • Распаковка является преобразование из оберточной-класса примитивного типа данных. Например. когда вы передаете целое число, когда ожидается int.
  • Autoboxing - это автоматическое преобразование из примитивного типа данных в соответствующий класс-оболочку. Например. когда вы передаете int, когда ожидается объект Integer.
Смежные вопросы