Try English version of Quizful



Раздаем бесплатные Q! подробности в группе Quizful.Alpha-test
Партнеры
Рекрутерам: Прескрининг кандидатов about
Топ контрибуторов
loading
loading
Знаете ли Вы, что

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Лента обновлений
ссылка 09:16:58
Комментарий от uic:
много вопросов, содержащих синтаксис с++11.
для теста по STL...
ссылка Nov 20 18:33
Комментарий от kozak95:
согласен
ссылка Nov 20 14:11
Комментарий от Leff:
pt, pc? Вы это серьезно? Рубеж 2017-2018 за окном!
Зачем де...
ссылка Nov 20 13:47
Комментарий от Leff:
19/20, но много вопросов по тем понятиям, которые уже давно...
ссылка Nov 20 01:38
Добавлен вопрос в тест CSS - Основы
Статистика

Тестов: 153, вопросов: 8578. Пройдено: 387276 / 1881083.

Java / Автоупаковка примитивов в Java

Автор: shual  к списку      

Вопрос
Что такое autoboxing в Java и каковы правила автоупаковки примитивных типов в классы-обертки?
Ответ
Автоупаковка это механизм неявной инициализации объектов классов-оберток (Byte, Short, Character, Integer, Long, Float, Double) значениями соответствующих им исходных примитивных типов (соотв. byte, short, char, int, long, float, double), без явного использования конструктора класса.
Автоупаковка происходит при прямом присвоении примитива - классу-обертке (с помощью оператора"="), либо при передаче примитива в параметры метода (типа "класса-обертки"). Автоупаковке в "классы-обертки" могут быть подвергнуты как переменные примитивных типов, так и константы времени компиляции(литералы и final-примитивы). При этом литералы должны быть синтаксически корректными для инициализации переменной исходного примитивного типа.

Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива - типу "класса-обертки".
Например, попытка автоупаковать переменную типа byte в Short, без предварительного явного приведения byte->short вызовет ошибку компиляции.

Автоупаковка констант примитивных типов допускает более широкие границы соответствия. В этом случае компилятор способен предварительно осуществлять неявное расширение/сужение типа примитивов. Преобразование происходит в два этапа:
1) неявное расширение(сужение) исходного типа примитива до типа примитива соответствующего классу-обертке (для преобразования int->Byte, сначала компилятор неявно сужает int в byte)
2) автоупаковку примитива в соотвествующий "класс-обертку" (компилятор автоупаковывает byte->Byte). однако в этом случае существуют два дополнительных ограничения:
a) присвоение примитива - "обертке" может производится только оператором "=" (нельзя передать такой примитив в параметры метода , без явного приведения типов)
b) тип левого операнда не должен быть старше чем Character, тип правого не дожен старше чем int, (допустимо расширение/сужение byte <-> short, byte <-> char, short <-> char
и только сужение byte <- int, short <- int, char <- int, все остальные варианты требуют явного приведения типов)

Дополнительная особенность целочисленных "классов-оберток" созданных автоупаковкой констант в диапазоне -128 +127 , в то что они кэшируются JVM. Потому такие обертки с одинаковыми значениями будут являтся ссылками на один объект.

Если Вам понравился вопрос, проголосуйте за него

Голосов: 26  loading...
kir_jacob   Blade_Master   Russa   Sunrise123   AARomanov1985   san4osq   vvkvvk   LincolnShow   andrew_aa0mail   panser   Nata22   Kirill_snk   Zerus   pikaboom   fil7   humb1t   Ronny147   kira_shtorm   voyager42   answer42   Letos   dimaatkaev   loneliness   dcba1257908   Vikky_Leto   arnost