Главная » Java, Структуры данных и алгоритмы » Приведение типов переменных в выражениях

0

Операция приведений типов позволяет изменять тип переменной. По сути, можно привести (преобразовать) переменную одного типа в такую’ же переменную другого типа. Приведение типов необходимо при выполнении некоторых арифметических операций и операций ввода/вывода.

Операция приведения типа переменной выглядит следующим образом:

(<desired_type>)<variable>

В Java существуют два основных вида приведения типа — преобразование базовых типов или преобразование переменных объектов. В данном разделе рассматривается приведение числовых и строчных типов, а приведение типов переменных объекта будет рассмотрено в разделе 2.5. Например, перед выполнением операции деления желательно преобразовать тип int в double.

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

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

Например:

double d1 = 3.2;

double d2 = 3.9999;

Int i1 = (Int)d1; // значение i1 равно 3

Int i2 = (Int)d2; // значение i2 равно 3

double d3 = (double)i2; // значение" d3 равно 3.0

Приведение типов при выполнении операций

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

Int И = 3;

Int i2 =^6;

dresult = (double)il / (double)i2; // значение dresult равно 0.5 dresult = И / i2; // значение dresult равно 0.0

Следует отметить, что при преобразовании И и i2 в тип double выполнена обычная операция деления вещественных чисел. Если предварительно не осуществить приведение типа И и i2, то выполняется целочисленное деление, и результат выражения i1/i2 соответствует значению int 0. В этом случае Java производит неявное приведение типа и преобразует значения типа int в результат типа double. Итак, рассмотрим неявное приведение типа.

Если явное приведение типа, то есть операция приведения, внутри кода не указано, Java выполняет неявное приведение типа. Эта операция состоит в том, что Java самостоятельно изменит тип переменных, даже ?если такая операция не была описана. Приведение типа в этом случае проводится в соответствии с типом результативной переменной при условии, что это не приводит к потере точности.

Например:

Int iresult, i = 3; double dresult, d = 3.2;

dresult = i / d; // dresult имеет значение 0,9375. При этом i была

// преобразована в тип double, т.к. dresult имеет тип double, iresult = i / d; // данная операция приведет к сообщению компилятора // об ошибке;

// неявное приведение типа необходимо в случае // возможной потери точности.

В случае потери точности Java выполняет неявное приведение типа. В приведенном выше примере в строке

iresult = i/d;

необходимо выполнить неявное приведение к типу int. В данном случае, если переменная d типа double будет преобразована в тип int, в результате деления будет отброшена дробная часть.

Таким образом, общее правило при операциях приведения типа — «нерисковать». Если нет уверенности, выполнит ли компилятор цеявное преобразование типа, лучше записать эту операцию, то есть провести ее явно. Переменные, преобразованные с помощью явного приведения типа, гарантируют получение верных результатов.

Неявное преобразование типа строчных объектов

В Java лишь в одном случае возможно использование только неявного приведения типа, а именно — при сцеплении строк. Если происходит объединение строки с каким-либо объектом или данными базового типа, этот объект или данные автоматически превращаются в символьную строку. Однако явное приведение типа объекта или исходного типа к типу строки невозможно, то есть следующие записи неверны:

String s = (String) 4.5; // Неверно!

String t = "Value + (String) 13; // Неверно!

String u = 22; // Неверно!

Чтобы преобразовать объект в строку, необходимо выполнить особый метод toString либо осуществить неявное приведение типа с помощью операции сцепления строк.

Итак, правильно будет записать:

String s = "" 4.5; // верно, но плохой стиль записи

String t "Value =" + 13; // верно

String u = lnteger.toString(22); // верно

Как отмечено выше, любой Java-объект поддерживает метод toString() (без аргументов), который позволяет преобразовать этот объект в строку. Кроме того, классы Integer, Long, Short, Byte, Float и Double имеют встроенный статичный метод toString(x), используемый для преобразования одноименного базового типа в строку.

Источник: Гудрич М.Т. Г93 Структуры данных и алгоритмы в Java / М.Т. Гудрич, Р. Тамассия; Пер. с англ. A.M. Чернухо. — Мн.: Новое знание, 2003. — 671 е.: ил.

По теме:

  • Комментарии