JavaRush /Курсы /Java Multithreading /Autoboxing (immutables)

Autoboxing (immutables)

Java Multithreading
9 уровень , 3 лекция
Открыта
Autoboxing (immutables) - 1

— Привет, Амиго!

Сегодня я расскажу про autoboxing. Box – это коробка. Boxing – упаковка. А AutoBoxing – это соответственно – автоматическая упаковка.

Насколько ты помнишь, в Java есть как типы, унаследованные от класса Object, так и примитивные типы. Но, как оказалось, такая удобная вещь как коллекции и generic’и могут работать только с типами, унаследованными от Object.

Тогда было принято решение сделать не примитивный аналог каждого примитивного типа.

Примитивный тип Не-примитивный аналог
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character
void Void

Но каждый раз преобразовывать эти типы друг в друга оказалось не очень удобно:

int x = 3;
Integer y = new Integer(x+1);
int z = y.intValue();

Особенно, если работать сразу с коллекциями:

Пример

int[] numbers = new int[10];
ArrayList<Integer> list = new ArrayList<>();
for (int i : numbers) {
    list.add(new Integer(i));
}

Поэтому разработчики Java придумали автоматическую «упаковку» (boxing) и «распаковку» (unboxing) примитивных типов в их непримитивные аналоги.

Вот как это работает:

Видимый код Что происходит на самом деле
int x = 3;
Integer y = x+1;
int x = 3;
Integer y = Integer.valueOf(x+1);
int z = y;
int z = y.intValue();
Boolean b = Boolean.FALSE;
boolean a = b;
Boolean b = Boolean.FALSE;
boolean a = b.booleanValue();
Integer x = null;
int y = x;
Integer x = null; int y = x.intValue(); //кинется исключение

Все просто. Ты можешь присваивать типы int и Integer друг-другу, об остальном позаботится компилятор.

— Это очень удобно.

— Ага. Но есть нюансы, о которых я расскажу дальше.

Комментарии (48)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Denis Odesskiy Уровень 47
15 июня 2024
Кстати, кто мне подскажет, например в C# есть такой удобный метод как TryParse() который в отличае от метода Parse() не кидает исключения а возвращает 0 если число не получается спарсить. Метод Parse() не вдаваясь в детали там работает примерно также как и в Java parseInt() и т.п. Так вот вопрос: есть ли нечто подобное TryParse() из C# в Java ?
SomeBody098 Уровень 51
16 августа 2024
наверно все же нет, но никто не запрещает сделать нечто подобное самому (к примеру ExceptionHandler который мы делали в большом задании на конце 8 уровня Java Multithreading)
Dima Makarov Уровень 42
9 марта 2023
После многопоточности, написания HTML редактора, ознакомления самостоятельного с паттернами нам дают автобоксинг ? Серьезно ? Троллинг мега уровня.
Denis Odesskiy Уровень 47
15 июня 2024
Повторение мать его учения. Ну а знаки препинания расставьте сами...😄
Константин Уровень 51
8 февраля 2023
И вот на 40 уровне я, наконец, узнал, что примитивные типы не унаследованы от Object :)
6 августа 2023
я тоже я щас просто вахуе
Vit Уровень 33
1 декабря 2021
"Не примитивный" вроде как должно быть слитно - непримитивный.
SERGEY Уровень 31
24 апреля 2022
вроде как мы тут программирование учим
proxylunae Уровень 45
17 августа 2022
Мало того что ты киску мучаешь, так ещё и по левой теме)
Виктор Уровень 1
5 октября 2022
Думаю вы ошибаетесь. В предложении "Тогда было принято решение сделать не примитивный аналог каждого примитивного типа." хоть и нет, но предполагается следующее противопоставление: "не примитивный, а сложный". В этом случае "не" пишется с прилагательными раздельно.
Kurama Уровень 50
2 декабря 2022
Та не. Отдельно, потому что имеется в виду противопоставление (которого нет) ? Так можно тогда к любой фразе подойти: "ты не большого роста", потому что это как бы "ты не большого роста, а малого"... ну бред же
Виктор Уровень 1
2 декабря 2022
Вы должны понимать, что и "небольшого роста" и "не большого роста" будет допустимо. Как правильно, решает автор. Если вы пишете слитно или раздельно, то вы смещаете акцент в ту или иную сторону. Сравните: "В высоту он был метр с кепкой, в общем, небольшого роста" - как правило имеется в виду маленького роста. "Он был не большого роста. Это был просто гигант." - тут противопоставление.
Kurama Уровень 50
2 декабря 2022
Ну так, а я о чем "Он был не большого роста. Это был просто гигант." - это ж противопоставление (неважно, в какой форме), поэтому и раздельно
Виктор Уровень 1
4 декабря 2022
блин, уберите "Это был просто гигант". Противопоставление не исчезнет, если вы напишете раздельно. Еще раз: написав вместе или раздельно, ВЫ писатель делает акцент читателю. Разумеется, мы исходим из того, что писатель понимает, что пишет. Это как в "Казнить нельзя помиловать" - нет правильного ответа, где ставить запятую. Запятая покажет, как читать предложение.
Kurama Уровень 50
4 декабря 2022
Очень странное умозаключение. Я - автор, поэтому пишу, как хочу... В моё время только скобки () ставились, как мне угодно "В течении часа" - тут нет ошибки, потому что я как писатель воспринимаю время рекой
Виктор Уровень 1
4 декабря 2022
Есть правила русского языка, за которые выходить не стоит. То, что мы обсуждали выше, укладывается в правила русского языка. Ваше "в течении часа" уже не укладывается, а втискивается. Хотя формально правильно, если вы говорите про час, как реку. И могло бы иметь место, если бы вы были заслуженным писателем. Скажем, такое было бы допустимо, например, Маршаку. У вас же и у меня, если так писать, это будет воспринято знающими людьми как безграмотность. А вообще пишите как хотите. Тут у нас не урок русского языка.
Anonymous #2489173 Уровень 35
3 июля 2021
За комикс можно и оскорбление чувств верующих схлопотать
Danil Lepekhin Уровень 30
13 сентября 2021
Что не отменяет его юмора
Aleksandr Alekseenko Уровень 40
13 мая 2021
Наверно, с учетом CodeConventions, это выражение имеет более кашерный вид

Boolean b = Boolean.FALSE;
чем просто использование false
18 апреля 2021
Void тоже тип ;) вспомнилось про Одиссея... учили в школе наизусть, как давно это было... (Циклоп) Ты кто? (Одиссей) Я - кто? - Никто... Когда-то был царём и кем-то правил, Но мир привычный, вышло так, оставив, Я вынужден был утверждаться в мире том, Что никому и нынче неизвестен, А потому никем и не ценим, И вот теперь, стою на этом месте, Перед тобой циклоп - досель непобедим... (Циклоп) Что за ответ?!... Меня с ума он сводит... Тебя, козявка, я спросил: кто ты? Пусть голос мощный мой, взорвёт ночь темноты!!! Меня, единственный мой глаз, подводит... Ведь разум, выстроенный на одном глазу, Не различает множества оттенков... Звериной морде будет "не к лицу" Торжественность и глубина момента, А ну-ка! По простому отвечай! Пока не оглушил тебя я рёвом - Не насекомое ли ты, случайно Прибившееся к моим овцам и коровам? (Одиссей) Мудрейшие из мудрых говорят, Что человек - животное... В ответ им Чем мог бы возразить я, как солдат? Как мореплаватель? Торговец неприметный? Что я могу быть разным?! Разве что... Животное ж - такое, как родится, С рожденья и до смерти - всё одно... Нет, не дано ему богами - измениться! Гусь - вечно гусь, а тигр - всегда лишь тигр, Но Одиссей - уже себе не равен! И прошлый Одиссей - давно погиб... А этот Одиссей кто - я не знаю... (Циклоп) Жужжит опять... Мешает крепко спать... Но где он? Как бы мне его прихлопнуть? Проклятых насекомых род - свободней, Чем мои овцы, им бы так пищать Я не позволил... И мозги бы вправил! Эй ты, презренный, ненавистный мне - Я покажу тебе, в пещере кто хозяин! Кто тут хозяин! - В вечной темноте! (Одиссей) Но я - Никто! Ты справиться не сможешь Со мною... Не поняв, кто пред тобой... А в этом деле - рыком не поможешь, Игрою мускулов с извилиной одной Лишь на себя накличешь беды, волосатый, (Циклоп) Кусучая блоха всегда всех злее! Сейчас тебя во мраке я найду, И съем "Никто", как голос Одиссея, ... Но я "Никто" - меня здесь больше нет! Тебе циклоп, "Никто" - ведь не поможет?!
Anonymous #2631266 Уровень 41
16 мая 2021
class Human extends Animal{} Human odyssey = null; cyclope.eat(odyssey) throws new ObjectNotFoundException() Как-то так.
16 мая 2021
описания объекта циклоп не хватает class Cyclope extends Human{ int numEyes =1; height =300; }
Dmitry Уровень 1
20 августа 2021
Похоже у вас стартовала профессиональная деформация =)
LuneFox Уровень 41 Expert
15 ноября 2021
не numEyes, а eyesCount
23 февраля 2021
Понимаю, что уже фиг знает какой уровень, но этот вопрос на 1:50 минуте https://www.youtube.com/watch?v=VbMWqfEtbMo иногда крутился в моей голове пока не посмотрела этот видос. И это несмотря на то, что уже давно использовала обертки 😂
Иван Уровень 31
2 февраля 2021
Повторение - мать учения...
Pig Man Уровень 41
31 декабря 2020
Теперь в уроках пошли религиозные шутки.. Что дальше?
9 февраля 2021
А дальше поедут автозаки за "оскорбление чувств верующих" :)))