Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГТЭУ инфа экзамен.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
149.71 Кб
Скачать
  1. Понятие преобразования типов в Java.

В языке Java действуют следующие правила:

  1. Если один операнд имеет тип double, другой тоже преобразуется к типу double.

  2. Иначе, если один операнд имеет тип float, другой тоже преобразуется к типу float.

  3. Иначе, если один операнд имеет тип long, другой тоже преобразуется к типу long.

  4. Иначе оба операнда преобразуются к типу int.

Преобразования типов

1. Виды преобразований

Каждое выражение в Java имеет тип, который определяется структурой выражения и типами составляющих его операндов (констант, переменных и методов). Однако, иногда нам может потребоваться явное преобразование выражения в другой тип. Кроме того, в некоторых ситуациях исполняющая система Java сама неявно проводит такие преобразования.

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

Далее в этой главе приведена классификация всех возможных преобразований типов, а затем классификация контекстов в которой они могут использоваться.

1.1. Расширяющие преобразования чисел

Расширяющие преобразования чисел — это преобразования числового типа в "больший" числовой тип, которые считаются безопасными, т. к. не приводят к потере величины преобразуемого значения. Такими преобразованиями в Java являются:

  • преобразования byte в short, int, long, float и double;

  • преобразования short в int, long, float и double;

  • преобразования char в int, long, float и double;

  • преобразования int в long, float и double;

  • преобразования long в float и double;

  • преобразования float в double.

В действительности, преобразование целого значения в плавающее может привести к потере точности, т. е. к потере значащих цифр.

1.2. Сужающие преобразования чисел

Сужающие преобразования чисел — это преобразования числового типа в "меньший" числовой тип, которые могут привести как к потере величины, так и к потере точности. Такими преобразованиями в Java являются:

  • преобразования byte в char;

  • преобразования short в byte и char;

  • преобразования int в byte, short и char;

  • преобразования long в byte, short, int и char;

  • преобразования float в byte, short, int, long и char;

  • преобразования double в byte, short, int, long, float и char;

Мы не будем здесь подробно рассматривать правила, по которым происходят эти преобразования, поскольку интуитивно они понятны, а формально достаточно громоздки. При их применении важно помнить, что Java, в отличие от других языков, не генерирует ошибок при переполнении (overflow) или потере значения (underflow), поэтому контроль за корректностью преобразований полностью ложится на программиста.

1.3. Расширяющие преобразования ссылок

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

  • преобразование любого класса или интерфейса в его предка (в частности, в тип Object);

  • преобразование класса в интерфейс, который он реализует;

  • преобразование любого массива в тип Object или тип Cloneable;

  • преобразование массива типа S[] в массив типа T[], если S и T — ссылочные типы, и преобразование S в T является расширяющим;

  • преобразование нулевого типа в любой ссылочной тип.