[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-core-chto-takoe-autoboxing-avtoupakovka-v-java-i-kakovy-pravila-upakovki-primitivnykh-tipov-v-klassy-obertki":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},64,"chto-takoe-autoboxing-avtoupakovka-v-java-i-kakovy-pravila-upakovki-primitivnykh-tipov-v-klassy-obertki",2,"java-core","Java Core","☕","Что такое autoboxing (автоупаковка) в Java и каковы правила упаковки примитивных типов в классы-обертки?","Автоупаковка - это механизм неявной инициализации объектов классов-оберток (`Byte`, `Short`, `Integer`, `Long`, `Float`, `Double`, `Character`, `Boolean`) значениями соответствующих им исходных примитивных типов (`byte`, `short`, `int`...), без явного использования конструктора класса.\n\n+ Автоупаковка происходит при прямом присваивании примитива классу-обертке (с помощью оператора `=`), либо при передаче примитива в параметры метода (типа класса-обертки).\n\n+ Автоупаковке в классы-обертки могут быть подвергнуты как переменные примитивных типов, так и константы времени компиляции (литералы и `final`-примитивы). При этом литералы должны быть синтаксически корректными для инициализации переменной исходного примитивного типа.\n\n+ Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива типу класса-обертки. Например, попытка упаковать переменную типа `byte` в `Short`, без предварительного явного приведения `byte` в `short` вызовет ошибку компиляции.\n\n+ Автоупаковка констант примитивных типов допускает более широкие границы соответствия. В этом случае компилятор способен предварительно осуществлять неявное расширение\u002Fсужение типа примитивов:\n    1) неявное расширение\u002Fсужение исходного типа примитива до типа примитива, соответствующего классу-обертке (для преобразования `int` в `Byte`, сначала компилятор самостоятельно неявно сужает `int` к `byte`)\n    2) автоупаковку примитива в соответствующий класс-обертку. Однако, в этом случае существуют два дополнительных ограничения:\n        a) присвоение примитива обертке может производится только оператором `=` (нельзя передать такой примитив в параметры метода без явного приведения типов)\n        b) тип левого операнда не должен быть старше чем `Character`, тип правого не должен старше, чем `int`: допустимо расширение\u002Fсужение `byte` в\u002Fиз `short`, `byte` в\u002Fиз `char`, `short` в\u002Fиз `char` и только сужение `byte` из `int`, `short` из `int`, `char` из `int`. Все остальные варианты требуют явного приведения типов).\n\nДополнительной особенностью целочисленных классов-оберток, созданных автоупаковкой констант в диапазоне `-128 ... +127` является то, что они кэшируются JVM. Поэтому такие обертки с одинаковыми значениями будут являться ссылками на один объект.","","junior",[15,16,17,18],"core","primitives","autoboxing","wrappers",[],null,{"title":22,"description":23,"ogTitle":22,"ogDescription":24,"keywords":25,"schemaAnswer":33,"featuredSnippetReady":34},"Autoboxing в Java: автоупаковка примитивов в обёртки — Gymterview","Что такое autoboxing (автоупаковка) в Java, правила упаковки примитивных типов в классы-обёртки, кэширование значений в диапазоне -128..127.","Автоупаковка — неявная инициализация объектов классов-оберток значениями примитивных типов без явного использования конструктора.",[17,26,27,28,29,30,31,32],"автоупаковка","классы-обертки","примитивы","Integer","boxing","unboxing","Java","Автоупаковка — механизм неявной инициализации объектов классов-оберток (Integer, Long и др.) значениями примитивных типов без явного вызова конструктора. Происходит при прямом присваивании или передаче в параметры метода. Требует точного соответствия типов для переменных. Целочисленные обёртки в диапазоне -128..+127, созданные автоупаковкой, кэшируются JVM — обёртки с одинаковыми значениями будут ссылками на один объект.",true]