前言
上节我们简单介绍了 Java 的数据类型,在日常开发中我们还经常用到类型的转换,本节来介绍一下。
自动类型转换
当我们把表数范围小的数值或变量直接赋给另一个表数范围大的变量时,Java会自动进行类型的转换。
自动类型转换规则如下:
- byte/ short /char -> int -> long -> float -> double;
- 任何基础类型的值和 字符串 进行连接操作时,基础类型的值会自动转变为字符串类型(虽然字符串类型是引用类型);
扩展:
byte、short、char 三者之间不会互相主动转换,它们 默认会先转换为int类型 ,如2个byte类型的变量计算结果是int类型的;
虽然int类型的表数范围比byte类型的大,但我们可以把int类型的值赋给byte类型的变量,前题是int类型的数值不能超过byte类型可接受的范围。
例:
public class AutoConversion {
public static void main(String[] args){
int a=3;
float b=a;
System.out.println(b); //输出3.0
byte c=9;
// char d=c; //此行出错,因为byte类型不能自动转换为char类型
double d=c;
System.out.println(d); //输出9.0
System.out.println("hello "+3+2); //输出 hello 32
System.out.println(3+2+" hello"); //输出 5 hello
}
}
强制类型转换
语法规则:(targetType) var ,强制类型转换的运算符是一对括号()。
强制类型转换就好比是将一个大杯子里的水倒向一个小杯子,如果大杯子里的水少还好,否则倒向小杯子后,小杯子里的水可能会溢出,会引起水的丢失(数据丢失),所以我们也称强制类型转换为“缩小转换”。
public class NarrowConversion { public static void main(String[] args){ int a=250; byte b=(byte)a; System.out.println(b); //输出 -6,数据溢出了 } }
表达式类型的自动提升
当一个算术表达式包含多种基本类型的值时,此运算表达式的数据类型会自动提升,规则如下:
- byte、short、char 类型会自动提升到int类型;
- 整个算术表达式的数据类型(结果值的类型)会自动提升到表达式中最高等级的操作数的类型。
如:
short a=123; a=a-1; // 会报错,因为1是int类型,a是short类型,右边运算后的结果是int类型,把int类型赋给short类型会报错
扩展:
2个int类型的值相除,结果肯定是int类型,因为2个int运算结果的类型以最高类型为准,哪怕除不尽,结果也必然是int类型的值。
最后,大家是不是觉得没这么简单了?如果觉得此文GET到新技能了,欢迎关注我支持一下 ~