В чем разница между бокса и AutoBoxing в Java? В нескольких книгах по сертификации Java используются два таких термина. Они ссылаются на то же, что и на бокс?В чем разница между бокса и AutoBoxing в Java?
ответ
Бокс механизм (т.е. от 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()
, может.
Прекрасно положил. .. –
С хорошим примером .. :) –
В моем понимании, «Бокс» означает «Явное построение обертки вокруг примитивного значения». Например:
int x = 5;
Integer y = new Integer(x); //or Integer.valueOf(x);
Между тем, "Autoboxing" означает "неявно построения оболочки вокруг примитивного значения". Например:
Integer x = 5;
Autoboxing является автоматическое преобразование, что компилятор Java делает между примитивными типами и их соответствующий объект класса-оболочки. Например, преобразование int в Integer, double в Double и т. Д. Если преобразование идет другим путем, это называется unboxing.
- Распаковка является преобразование из оберточной-класса примитивного типа данных. Например. когда вы передаете целое число, когда ожидается int.
- Autoboxing - это автоматическое преобразование из примитивного типа данных в соответствующий класс-оболочку. Например. когда вы передаете int, когда ожидается объект Integer.
- 1. В чем разница между автобоксированием и принуждением?
- 2. В чем разница между **/*. Java и * .java?
- 3. В чем разница между = и == в java?
- 4. В чем разница между `| `и` || `в java?
- 5. В чем разница между: = и =! в Java?
- 6. В чем разница между java и jsp?
- 7. В чем разница между PHP и Java?
- 8. В чем разница между JavaScript и Java?
- 9. В чем разница между + = и = +?
- 10. В чем разница между «» и «»?
- 11. В чем разница между «и»?
- 12. В чем разница между `{}` и `[]`?
- 13. В чем разница между == и ===?
- 14. В чем разница между «+» и «\ +»?
- 15. В чем разница между/* ... */и/** ... */
- 16. В чем разница между: и +:
- 17. В чем разница между $ {} и # {}
- 18. В чем разница между $ _. и $ _
- 19. В чем разница между = и: =
- 20. В чем разница между && и &?
- 21. В чем разница между $ {} и # {}?
- 22. В чем разница между + и%?
- 23. В чем разница между + = и = +
- 24. В чем разница между # {} $ {} и% {}?
- 25. В чем разница между ['#'] и [. = '#']?
- 26. В чем разница между == ~ и! =?
- 27. В чем разница между «/» и «/ *»?
- 28. В чем разница между «./» и «../»?
- 29. В чем разница между {}()) и {})()
- 30. В чем разница между «'» и «»
это разблокировка, а не бокс – Bikku
@UUIIUI есть – fge
@Tunaki Ну, не обязательно.Это можно рассматривать как бокс: 'Integer i = new Integer (1);' и это autoboxing 'Integer i = 1;'. Однако это просто нерелевантная семантика. – Kayaman