类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要进行类型转换
-
运算中,不同类型的数据先转化为同一类型,然后进行运算
低 ——————————————————> 高 |
---|
byte,short,char ——> int ——> long ——> float ——> double |
* 这里的高低指它们的容量(或者 字节大小)
* 这里 float 的容量大于 long 的容量,是因为浮点数的优先级一定大于整数
-
自动类型转换(低 ——> 高)
-
强制类型转换(高 ——> 低)
-
格式:(类型) 变量名
-
代码示例
public class case{ public static void main (String[] args){ int i = 128; byte b = (byte) i;//强制转换,内存溢出 System.out.println(i); System.out.println(b); } }
-
运行结果示例
128 -128
-
byte类型 对应的 Byte类 的最大值为127,因此将 int类型 中 i 的值强制转换为 byte 类型时出现了 内存溢出 的问题
-
因此当进行转换时,尽量避免内存溢出的情况
注意点: 1. 不能对布尔值进行转换 2. 不能把对象类型转换为不相干的类型 3. 在把高容量转换到低容量时,需要强制转换 4. 转换的时候可能存在内存溢出,或者精度问题!
-
相关常见问题
-
操作比较大的数时,注意溢出问题
-
代码示例
public class case{ public static void main(String[] args){ int money = 10_0000_0000; //这里因为 JDK7 的新特性,数字之间可以用下划线分割 int years = 20; int total = money * years; //因为计算时内存溢出了,所以运行后输出结果为 -1474836480,因此结果错误 long total2 = money * years; //因为在转换成 long类型之前,计算时默认是 int类型 的值,所以在转换成 long类型 之前已经存在 内存溢出 的问题,因此结果错误 long total3 = money * ((long)years); //在计算前先将一个数转化为 long类型,再进行计算时自动转换以 long类型 的值进行计算,不存在内存溢出问题,因此结果正确 System.out.println(total); System.out.println(total2); System.out.println(total3); } }
-
运行结果示例
-1474836480 -1474836480 20000000000
-
-
-