Java: План и дорожная карта развития + СОДЕРЖАНИЕ.
Приветствую Тебя, мой дорогой друг. Пришло время покончить с примитивными типами данных, надеюсь больше к ним не вернемся. Важная тема, определенно ты не раз с ней столкнешься.
Итак, Что значит привидение типа? А значит - это, преобразование одного типа в другой, к примеру из целочисленного в вещественный.
В Java имеется два вида преобразований явное и неявное и два типа преобразования расширяющее и сужающее. Начнем с неявного. Неявное - это автоматическое преобразование, которое Java делает сама. Что для этого нужно:
- Обязательно, совместимость обоих типов.
- Размерность преобразуемого типа должна быть равна или быть меньше результирующего типа.
На картинке показаны типы данных которые без проблем автоматически преобразуются в другие типы, ну кроме некоторых, которые имеют возможность потери точности.
Вероятность потерь - это возможная потеря точности или даже данных, чаще при преобразовании вещественного в целочисленный тип теряется дробная часть, а хуже когда потеря происходит именно данных, к примеру попытка преобразовать значение типа "double" выходящее за рамки диапазона типа "long".
Расширяющее преобразование типа - это преобразование меньшего типа в больший, как в примерах на картинке выше, то есть переменная с типом данных меньшим диапазоном значений, перевоплощается в больший диапазон. Из этого следует вывод, что неявное преобразование, всегда имеет расширяющий тип.
Если в выражении присутствуют значения или переменные типов "char", "byte", "short" они преобразуются в тип "int", а если есть хотя бы один операнд с типом "long", то все выражение преобразуется в "long".
Примитивный тип "boolean" нельзя преобразовать в любой другой тип данных, аналогично и любой другой тип в "boolean" так же нельзя преобразовать.
Явное преобразование типов - это указание конкретного типа к которому мы хотим привести значение. Как правило, явное преобразование имеет сужающий тип, получается что мы из большего диапазона делаем меньший. Указывается с помощью целевого типа обрамленного в круглые скобки (byte), (int), (float) и так далее.
Рассмотрим пример, две переменные типа "byte", в "varByte2" хотим поместить результат от сложения переменной "varByte", но Java ругается, ей не нравится, так как Java результат автоматически преобразовала в тип "int" то есть расширила, но нам то нужен "byte", значит нужно указать явно, пробуем.
Указали у первого операнда, но не помогло, так как мы явно задаем тип у одного лишь операнда, хм, попробуем явно преобразовать и второй операнд? Пробуем.
Не получилось, а все потому что мы преобразовываем в "byte" переменные которые и так с типом "byte", а нам нужно преобразовать результат от сложения.
Значит, операнды берем в круглые скобки.
А что если мы превысим диапазон типа "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: Побитовые операторы(операторы присваивания + приоритет выполнения).
Поставь лайк если понравилась статья, тебе всего лишь "клик", а мне радости полные штаны =). Подписывайся на канал, будет много интересных публикаций =).