Назад к вопросам
Junior
73
questionbank
Как переводить ссылочные типы в примитивные и наоборот?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для перевода ссылочных типов (объектных оберток) в примитивные и наоборот в Java используются следующие механизмы:
Из ссылочного в примитивный (разворачивание, unboxing):
- Присвоение объекта-обертки переменной примитивного типа. Java автоматически выполняет разворачивание.
- Использование методов
xxxValue()(например,intValue(),longValue(),booleanValue()и т.д.) соответствующего класса-обертки.
// Автоматическое разворачивание
Integer wrapperInt = 10;
int primitiveInt = wrapperInt;
// Использование метода xxxValue()
Double wrapperDouble = 15.5;
double primitiveDouble = wrapperDouble.doubleValue();
Из примитивного в ссылочный (упаковка, boxing):
- Присвоение примитивной переменной переменной ссылочного типа-обертки. Java автоматически выполняет упаковку.
- Использование конструктора класса-обертки.
- Использование статических методов
valueOf()(например,Integer.valueOf(),Boolean.valueOf()и т.д.) соответствующего класса-обертки. Статические методыvalueOf()предпочтительнее конструкторов, так как они могут использовать кеширование, что улучшает производительность.
// Автоматическая упаковка
int primitiveInt = 20;
Integer wrapperInt = primitiveInt;
// Использование конструктора (менее предпочтительно)
double primitiveDouble = 25.6;
Double wrapperDoubleConstructor = new Double(primitiveDouble);
// Использование статического метода valueOf() (предпочтительно)
boolean primitiveBoolean = true;
Boolean wrapperBooleanValueOf = Boolean.valueOf(primitiveBoolean);
Таблица соответствия:
| Примитивный тип | Ссылочный тип |
|---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
Автоматическая упаковка и разворачивание (autoboxing/unboxing) упрощают код, но могут привести к ошибкам NullPointerException, если попытаться развернуть null ссылочного типа в примитивный.