目录
1. 隐式转换
1.1 概念
也叫自动类型提升。
就是把一个取值范围小的数据或者变量,赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现,是程序自动帮我们完成的。
1.2 两种提升规则:
-
取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算。
-
byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。
1.3 取值范围从小到大的关系
byte short (char) int long float double
1.4 小练习
案例一:
double d = 10;
System.out.println(d);//10.0
解释:10是整数,整数默认是int类型的。
而在取值范围的顺序中:byte short (char) int long float double
在赋值的时候把一个int类型的赋值给了一个double类型的。把一个小的赋值给一个大的是可以直接给的。
案例二:
byte b = 100;
int i = b;//可以成功赋值
解释:因为byte的取值范围是小的,int的取值范围是大的,在底层进行了隐式转换,不需要我们额外写代码单独实现,是可以直接赋值。
案例三:
int i = 10;
long n = 100L;
double d = 20.0;
??? result = i + n + d;
问变量result是什么类型的?
解释:变量i是int类型,变量n是long类型,变量d是double类型。
而在取值范围的顺序中:byte short int long float double
所以变量i和变量n里面的值在参与运算的时候,都会进行类型提升,变成double。
最终其实就是三个double进行相加,那么最终的结果就是double类型的。
案例四:
byte b1 = 10;
byte b2 = 20;
??? result = b1 + b2;//int
问变量result是什么类型的?
解释:因为b1和b2都是byte类型的。所以在参与计算的时候,变量b1和变量b2里面的值都会自动提升为int类型的。最终其实就是两个int类型的相加,最终结果也是int类型的。
案例五:
byte b = 10;
short s = 20;
long n = 100L;
??? result = b + s + n;
问变量result是什么类型的?long
解释:变量b是byte类型的,变量s是short类型的,变量n是long类型的。
byte,short,char类型的变量在参与运算的时候,变量里面的值会直接先提升为int。
第一步:变量b和变量s里面的值会先提升为int参与运算。
int + int + long
第二步:而long类型的取值范围是大于int的取值范围的。
所以变量b和变量s里面的值会再次提升为long。
long + long + long。
所以最终结果是long类型的。
1.5 总结
1.自动类型转换:容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为
byte short (char) int long float double
2.有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的 那种数据类型,然后再进行计算。
3.byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
4.boolean类型不能与其它数据类型运算。
5.当把任何基本数据类型的值和字符串(String)进行连接运算时(+),基本数据类 型的值将自动转化为字符串(String)类型。
2.强制转换
2.1 概念
将容量大的数据类型转换为容量小的数据类型。使 用时要加上强制转换符:(),但可能造成精度降低或溢出,格外要注意。
书写格式:
目标数据类型 变量名 = (目标数据类型)被强转的数据;
2.2 案例
public class OperatorDemo2 {
public static void main(String[] args) {
double a = 12.3;
int b = (int) a;
System.out.println(b);//12
}
}
强制转换有可能会导致数据发生错误。(数据的精度丢失)
欢迎大家指点评论~ 点赞+关注⭐⭐⭐