Приведение типов. Если операнды арифметической операции имеют разные типы, то происходит повышение меньшего типа операнда и результат будет иметь высший тип операндов. Если такое действие не устраивает, можно выполнить явное приведение типа. Например, если bl и b2 имеют тип byte, а желателен результат типа short , то можно использовать код: short k = (short)(b1 + b2) ;
Сужение осуществляется просто отбрасыванием старших битов, что необходимо учитывать для больших значений. Например, определение byte b = (byte) 300;
даст переменной b значение 44. Действительно, в двоичном представлении числа 300, равном 100101100, отбрасывается старший бит и получается 00101100.
Таким же образом можно произвести и явное расширение (widening) типа, если в этом есть необходимость.
Результат арифметической операции над целыми типами имеет тип int, кроме того случая, когда один из операндов типа long. В этом случае результат будет типа long. Перед выполнением арифметической операции всегда происходит повышение типов byte, short, char. Они преобразуются в тип int, а может быть, и в тип long, если другой операнд типа long. Если результат целой операции выходит за диапазон своего типа int или long, то автоматически происходит приведение по модулю, равному длине этого диапазона, и вычисления продолжаются, переполнение никак не отмечается.
Укажем некоторые правила преобразования простых типов в строку и наоборот (более подробно правила преобразования представлены в документации JBuilder).
Преобразование простых типов в строку String. Следующие примеры показывают правила преобразования:
• Преобразование из short или int n в String gg:
gg = Integer.toString(n); или gg = String.valueOf(n); Соответственно можно использовать вместо toString следующее toBinaryString, toOctalString, toHexString
Когда используется другая база чисел, например, 7, то используется команда: gg = Integer.toString(b, 7);
• Преобразование из char c, в String gg: gg = String.valueOf(c);
• Преобразование из long n в String gg:
gg = Long.toString(n); или gg = String.valueOf(n); Можно заменить в случае необходимости toString на следующее: toBinaryString, toOctalString, toHexString
Когда используется отличное от 10 или 2 основание системы чисел (типа 7), то:
gg = Integer.toString(n, 7);
• Преобразование из float f в String gg:
gg = Float.toString(f); или gg = String.valueOf(f);
• Преобразование из double d в String gg:
gg = Double.toString(d); или gg = String.valueOf(d); Для сохранения десятичного формата разделения групп разрядов запятой или экспоненциального формата используются следующие приведения (для float -так же). Двойная точность: java.text.DecimalFormat df2
= new java.text.DecimalFormat("###,##0.00"); gg = df2.format(d);
Экспоненциальный формат (JDK 1.2.x и выше): java.text.DecimalFormat de
= new java.text.DecimalFormat("0.000000E00"); gg = de.format(d);
Преобразование строки String в простые типы. Следующие примеры показывают правила преобразования:
• Преобразование из String gg в short s: