-
由于Java是强类型语言,所以有时候在进行运算时,需要用到类型转换。
-
整型、常量、字符类型数据可以混合运算。
-
运算中,不同类型的数据先转化为同一类型,然后再进行运算。
-
类型转换等级有低级到高级的划分,主要根据数据类型的内存容量 来划分,容量越大等级越高,并且浮点型比整型优先级高。
-
当低等级数据类型向高等级数据类型进行类型转换时,会进行自动类型转换。
-
当高等级数据类型向低等级数据类型进行类型转换时,必须进行强制类型转换。
类型转换等级:
/* 低级 ------------------------------------------> 高级 */
/* byte -> short,char -> int -> long -> float -> double */
类型转规则:
- 不能对boolean类型进行类型转换。
- 不能把对象类型转换成不相关类的对象。
- 在把高等级的类型转换为低等级的类型时必须使用强制类型转换。
- byte类型到char类型、short类型与char类型之间不能进行自动类型转换。
一、自动类型转换
- 数值范围小的基本数据类型,可以自动类型转换为数值范围大的基本数据类型。
注意:
- byte类型向char类型转换时,不能进行自动类型转换。
- short类型和char类型相互之间转换,不能进行自动类型转换。
- char类型向更高等级类型转换时,可以进行自动类型转换。
示例:
byte byteNumber = (byte)1;
short shortNumber = byteNumber;
char charNumber = (char) shortNumber;
int intNumber = charNumber;
long longNumber = intNumber;
float floatNumber = longNumber;
double doubleNumber = floatNumber;
System.out.println(doubleNumber);//1.0
二、强制类型转换
- 用于显式地转换一个数值的类型,转换的数据类型必须是兼容的。
语法:‘(‘ + type + ‘)’ + value
示例:(byte)128
效果:
System.out.println((byte)128);//-128
注意:强制类型转换过程中可能导致溢出 或损失精度,例如:
/* 因为byte类型内存容量是8位,最大值为127,所以当int类型的值128强制转换为byte类型时,就会导致溢出 */
System.out.println((byte) 128);//-128
/* 浮点数到整数的转换是通过舍弃小数得到的,而不是四舍五入,所以会损失精度 */
System.out.println((int) 99.9);//99
System.out.println((int) -99.99f);//-99