Найти в Дзене
тотСамыйАйтишник

#8 Java: Явные и неявные приведения примитивных типов.

Java: План и дорожная карта развития + СОДЕРЖАНИЕ.

статья №7 Java: Константы.

Приветствую Тебя, мой дорогой друг. Пришло время покончить с примитивными типами данных, надеюсь больше к ним не вернемся. Важная тема, определенно ты не раз с ней столкнешься.

Итак, Что значит привидение типа? А значит - это, преобразование одного типа в другой, к примеру из целочисленного в вещественный.

В Java имеется два вида преобразований явное и неявное и два типа преобразования расширяющее и сужающее. Начнем с неявного. Неявное - это автоматическое преобразование, которое Java делает сама. Что для этого нужно:

  • Обязательно, совместимость обоих типов.
  • Размерность преобразуемого типа должна быть равна или быть меньше результирующего типа.
Неявное преобразование.
Неявное преобразование.

На картинке показаны типы данных которые без проблем автоматически преобразуются в другие типы, ну кроме некоторых, которые имеют возможность потери точности.

Вероятность потерь - это возможная потеря точности или даже данных, чаще при преобразовании вещественного в целочисленный тип теряется дробная часть, а хуже когда потеря происходит именно данных, к примеру попытка преобразовать значение типа "double" выходящее за рамки диапазона типа "long".
Java автоматически преобразовывает из типа в тип, неявное преобразование.
Java автоматически преобразовывает из типа в тип, неявное преобразование.

Расширяющее преобразование типа - это преобразование меньшего типа в больший, как в примерах на картинке выше, то есть переменная с типом данных меньшим диапазоном значений, перевоплощается в больший диапазон. Из этого следует вывод, что неявное преобразование, всегда имеет расширяющий тип.

Если в выражении присутствуют значения или переменные типов "char", "byte", "short" они преобразуются в тип "int", а если есть хотя бы один операнд с типом "long", то все выражение преобразуется в "long".

Неявное преобразование.
Неявное преобразование.

Примитивный тип "boolean" нельзя преобразовать в любой другой тип данных, аналогично и любой другой тип в "boolean" так же нельзя преобразовать.

Явное преобразование типов - это указание конкретного типа к которому мы хотим привести значение. Как правило, явное преобразование имеет сужающий тип, получается что мы из большего диапазона делаем меньший. Указывается с помощью целевого типа обрамленного в круглые скобки (byte), (int), (float) и так далее.

Явное преобразование.
Явное преобразование.

Рассмотрим пример, две переменные типа "byte", в "varByte2" хотим поместить результат от сложения переменной "varByte", но Java ругается, ей не нравится, так как Java результат автоматически преобразовала в тип "int" то есть расширила, но нам то нужен "byte", значит нужно указать явно, пробуем.

Ошибка.
Ошибка.

Указали у первого операнда, но не помогло, так как мы явно задаем тип у одного лишь операнда, хм, попробуем явно преобразовать и второй операнд? Пробуем.

Ошибка.
Ошибка.

Не получилось, а все потому что мы преобразовываем в "byte" переменные которые и так с типом "byte", а нам нужно преобразовать результат от сложения.

Ошибка.
Ошибка.

Значит, операнды берем в круглые скобки.

Java одобряет.
Java одобряет.

А что если мы превысим диапазон типа "byte", как тогда Java будет считать?

Попробуем рассчитать примеры на картинке. Итак, сумма переменных "varByte" равна 160, а максимальное значение "byte" составляет 127, Java сделает так: разделит 160 на две части, первая это максимальное значение диапазона равное 127 и вторая - это остаток 33, зная что у нас есть остаток, заберем единицу и добавим ее к первой части, после чего наше значение из максимального примет минимальное в диапазоне "byte" со сменой знака и примет значение -128, но остаток все еще есть 32, значит необходимо просуммировать первую и вторую части -128 + 32 = -96. Второй пример, в "byte" хотим пихнуть аж 255, делим на две части первая 127, вторая остаток 128, забираем у второй единичку и отдаем ее первой плюс смена знака, то есть первая теперь равна -128, а вторая 127, осталось просуммировать -128 + 127 = -1. И так с каждым значением примитивного типа вышедшим из диапазона.

Расчет значения вышедшего из диапазона.
Расчет значения вышедшего из диапазона.

Попробуй самостоятельно посчитать примеры на картинке снизу.

Самостоятельная работа
Самостоятельная работа

На этом все, до встречи в следующей статье.

статья №9 Java: Побитовые операторы(операторы присваивания + приоритет выполнения).

Поставь лайк если понравилась статья, тебе всего лишь "клик", а мне радости полные штаны =). Подписывайся на канал, будет много интересных публикаций =).

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
30 лет Java: от провалившегося гаджета до фундамента разработки ПО
Поможем найти работу и прокачать карьеру Некоторые языки программирования, например, Rust, Go и TypeScript, считаются крутыми. Другие, в том числе Cobol и Java, «скучны». Однако пусть Java, которому 23 мая этого года исполнилось тридцать лет, может, и не самый захватывающий язык, он остаётся одним из самых важных. Путь Java начался 23 мая 1995 года, когда его выпустила компания Sun Microsystems. За прошедшее время благодаря удачному видению разработчиков и адаптивности он превратился из нишевого проекта для потребительской электроники в мощный фундамент энтерпрайз-, облачной и веб-разработки...
ТОП-12 курсов по Java-Программированию с нуля, после которых реально трудоустроиться
Привет-привет! Снова я составила классный обзор – на этот раз про Java-разработчиков. Благо, много таких среди моих коллег, контора-то немаленькая. Мне, как веб-дизайнеру, часто приходится с джавистами общаться. Так что каждый программист Java поделился, где учился. Главный плюс онлайн-учебы – трудоустройство. Многие к нам попали после дистанционных занятий, почти каждая школа сейчас дает гарантии. Причем, возраст и регион роли не играют, можно же удаленно работать. Ну и школы частенько за полцены...
Циклы, языки и ассемблер
Рассмотрим довольно простую тему организации циклов. Почему я решил это сделать – потому что оказалось, что за привычными, особенно для уже замыленного глаза, вещами может скрываться неожиданное. Для начала обратимся к основам – как циклы делаются на ассемблере. Я буду использовать диалект x86, хотя это не принципиально. Итак, задача: Создать цикл, который повторяется 10 раз. Первый вариант: Этот цикл равносилен конструкции: for (i = 0; i < 10; i++) { ... } Как видим, здесь сначала i присваивается...
Следующая статья
Документы, вакансии и контакты