3.5 类型转换
我们知道Java是强类型语言,有些运算需要用到类型转换。
运算中,不同类型的数据先转化为同一类型,然后进行运算
低--------------------------------------->高
byte,short,char->int->long->float->double
低和高指的是容量,字节大小
public class Demo05{public static void main(String[]args){int i = 128;byte b = (byte)i;//强制类型转换,将int类型转换成byte类型System.out.println(i);System.out.println(b);}
}
//---------------------------------------输出结果为
128
-128
之所以会是-128是因为byte最大值为127,此时就会内存溢出的问题。
在转换的时候要注意内存溢出
强制类型转换:这是一种从高到低的转换
//强制类型转换
(类型)变量名
自动类型转换:是从低到高的转换
public class Demo05{public static void main(String[]args){int i = 128;double b = i;//从低到高的转换,不需要任何的修饰符System.out.println(i);System.out.println(b);}
}
//---------------------------------------输出结果为
128
128.0
注意点
/*
注意点
1. 不能对布尔值进行转换
2. 不能把对象类型转换为不相干的类型
3. 把高容量转换到低容量的时候,需要强制转换,反之不用强制
4. 转换的时候可能存在内存溢出或者精度问题!
*/
public class Demo05{public static void main(String[]args){System.out.println((int)23.7);System.out.println((int)-45.89f);char c = 'a';int d = c+1;System.out.println(d);System.out.println((char)d)}
}
//---------------------------------------输出结果为
23
-45
98
b
常见问题
/*
1. 操作比较大的数的时候,注意溢出问题
2. JDK7新特性,数字之间可以用下划线分割,而下划线并不会被输出,只是为了区分方便
*/
public class Demo06{public static void main(String[]args){int money = 10_0000_0000;System.out.println(money);int years =20;int total =money*years;System.out.println(total);long total2 = money*years;System.out.println(total2);long total3 = money*((long)years);System.out.println(total3);}
}
//---------------------------------------输出结果为
1000000000
-1474836480//这就是因为计算时内存溢出
-1474836480//因为money与years都是int类型,相乘之后默认也会被认为是int类型,计算完之后才把结果转换为long类型,此时结果还是溢出,也就是说转换之前已经出现问题了。
20000000000