Java объектно- ориентированный язык программирования, все что в java имеется представлено объектами. В java также имеются восемь примитивных типов, которые не являются объектами. Для этих типов существует соответствующие классы оболочки, предназначенные для создания объектов, преобразования итд, при работе с классами. Сейчас мы рассмотрим подробно преобразование и привидение типов.
(Integer, Double, Short, Byte,Long, Float, BigDecimal, BigInteger) Все эти классы имеют статические методы к примеру преобразования типа String к соответствующему типу.
Преобразовать String в int.
1 2 |
String str="1"; int i=Integer.parseInt(str); |
Преобразовать String в double.
1 2 |
String str="1"; double d=Double.parseDouble(str); |
Преобразовать String в short.
1 2 |
String str="1"; short s=Short.parseShort(str); |
Преобразовать String в byte.
1 2 |
String str="1"; byte b=Byte.parseByte(str); |
Преобразовать String в long.
1 2 |
String str="1"; long l=Long.parseLong(str); |
Преобразовать String в float.
1 2 |
String str="1"; float f=Float.parseFloat(str); |
Преобразовать String и другие типы в char.
Это операция не возможна, так как в char хранится лишь один символ, и в него не возможно впихнуть строку или число. Однако, можно строку поместить в массив символов char, или разбить строку на символы и присвоить в переменную char по индексу символ из строки.
1 2 3 |
String str="123"; char []cs=str.toCharArray(); //пример с массивом char c=str.charAt(0);//присваиваем переменной с символ 1 |
Не много отойдем от темы, если вы помните то в java строки можно было соединять(конкатенировать), используя оператор + листинг 1.1.
1 2 3 |
String a="nookery"; String b=".ru"; a=a+b; |
листинг 1.1
Однако, использование оператора «+» в конкатенации строк внутри java генерирует другой код в место a=a+b;листинг 1.2
1 2 3 |
String a="nookery"; String b=".ru"; a=new StringBuilder().append(a).append(b).toString(); |
листинг 1.2
Но так было не всегда, использования оператора + в конкатенации строк стало возможным только с java 5.0
Теперь мы рассмотрим всевозможные приведения типа int в другие типы, в java
Преобразовать int в double.
Явного приведения int к double не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в double, достаточно использовать оператор присвоения ==.
Преобразовать int в short.
1 2 |
int i=1; short s=(short)i; |
Преобразовать int в byte.
1 2 |
int i=1; byte b=(byte)i; |
Преобразовать int в long.
Явного приведения int к long не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в long, достаточно использовать оператор присвоения ==.
Преобразовать int в float.
Явного приведения int к float как и в случаи double не имеет смысла, так как мы знаем, что диапазон чисел int в легкую вместится в float, достаточно использовать оператор присвоения ==.
Преобразовать int в String.
1 2 |
int i=1; String s=""+i; |
Однако, не забывайте, что в этом случаи мы используем метод append() из класса StringBuilder().
Преобразовать int в char.
Как мы помним невозможно в 1 символ вместить целое число, однако если вы сделаете приведение типа :
1 2 |
int i=49; char c=(char)i; |
То присвоите в переменную с не число 49, а символ из десятичной системы счисления, если посмотреть таблицу то вы увидите что 49 это символ 1.
Теперь мы рассмотрим всевозможные приведения типа double в другие типы, в java
Преобразовать double в int.
1 2 |
double d=2.8; int i=(int)d; |
Однако, имейте ввиду, что приведения типа double к int введет к тому, что наше число 2.8 будет округлено в меньшую сторону, и все цифры после точки будут удалены, и в переменную i будет присвоено значения 2.
Преобразовать double в short.
1 2 |
double d=2.8; short s=(short)d; |
Как и в случаи с int переменная double будет округлена в меньшую сторону.
Преобразовать double в byte.
1 2 |
double d=2.8; byte b=(byte) d; |
Так как byte является целочисленным типом произойдет округления числа в меньшую сторону.
Преобразовать double в long.
1 2 |
double d=2.8; long l=(long)d; |
long является целочисленным типом произойдет округления в меньшую сторону.
Преобразовать double в float.
1 2 |
double d=2.8; float f=(float)d; |
В данном примере присваивается по десятичной системе символ «!» в переменную с. Как мы помним переменная char принимает символ, а не числа с плавающей точкой.
Преобразовать double в String.
1 2 |
double d=2.8; String str=""+d; |
Однако, не забывайте, что в этом случаи мы используем метод append() из класса StringBuilder().
Преобразовать short в int, long, double, float.
Явного приведение к типу не требуется.
1 2 3 4 5 |
short s=2; int i=s; long l=s; double d=s; float f=s; |
Преобразовать short в byte.
1 2 |
short s=2; byte b=(byte) s; |
Преобразовать short в String.
1 2 |
short s=2; String str=""+s; |
Преобразовать short в char.
1 2 |
short s=41; char c=(char) s; |
В данном примере присваивается по десятичной системе символ «)» в переменную с Как мы помним переменная char принимает символ, а не целые числа.
Преобразовать byte в int, long, short, double, float.
Так как byte имеет все 8 бит и его диапазон значений легко вмещается во все типы явного приведения не требуется.
1 2 3 4 5 6 |
byte b=22; int i=b; long l=b; short s=b; double d=b; float f=b; |
Преобразовать byte в char.
1 2 |
byte b=33; char c=(char) b; |
В данном примере присваивается по десятичной системе символ «!» в переменную с. Как мы помним переменная char принимает символ, а не целые числа.
Преобразовать byte в String.
1 2 |
byte b=33; String str=""+b; |
1 2 |
long l=12; int i= (int) l; |
Преобразовать long в byte.
1 2 |
long l=12; byte b=(byte) l; |
Преобразовать long в short.
1 2 |
long l=12; short s=(short) l; |
Преобразовать long в double, float .
Явного приведения к типу не требуется double и float, однако смотрите внимательно на диапазон значений. используется оператор «=»
Преобразовать long в char.
1 2 |
long l=33; char c=(char) b; |
В данном примере присваивается по десятичной системе символ «!» в переменную с. Как мы помним переменная char принимает символ, а не целые числа.
Преобразовать long в String.
1 2 |
long l=33; String str=""+b; |
1 2 |
float f=12; int i=(int) f ; |
Преобразовать float в byte.
1 2 |
float f=12; byte b=(byte) f; |
Преобразовать float в short.
1 2 |
float f=12; short s=(short) f; |
Преобразовать float в long.
1 2 |
float f=12; long l=(long) f; |
Преобразовать float в double.
1 2 |
float f=12; double d=f; |
Явного приведения не требуется.
Преобразовать float в char.
1 2 |
float f=33; char c=(char) b; |
В данном примере присваивается по десятичной системе символ «!» в переменную с. Как мы помним переменная char принимает символ, а не числа с плавающей точкой.
Преобразовать float в String.
1 2 |
float f=33; String str=""+b; |
Важно запомнить когда делаете приведения типов чисел, то они могут выходить за рамки диапазона значений. Компилятор это проглотит, а вот результат будет не верный. Это очень частая ошибка начинающих программистов, особенное она часто встречается когда происходит математические вычисления, когда явный результат не известен, но который может уже выходить за диапазон значений. Я составил таблицу приведения типов, сплошными линиями указаны преобразования без потери данных, все остальные операции могут выходить за рамки диапазона значений. рис 1.1