一、隐式转换
定义:
也叫自动类型提升。
就是把一个取值范围小的数据或者变量,赋值给另一个取值范围大的变量。此时不需要我们额外写代码单独实现,是程序自动帮我们完成的。
就是小的给大的,可以直接给。
两种提升规则:
- 取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算。
- byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。
取值范围从小到大的关系:注意遵循大小关系!!!
byte short int long float double
案例:
案例一:
double d = 10;
System.out.println(d);//10.0
解释:
取值范围的顺序中: int double
int型提升为double型
案例二:
byte b = 100;
int i = b;//可以成功赋值
解释:
取值范围的顺序中:byte int
byte型提升为int型
案例三:
int i = 10;
long n = 20L;
??? result = i + n;
问变量result是什么类型的?
解释:
变量i是int类型的,变量n是long类型的。
取值范围的顺序中: int long
变量i里面的值会自动提升为long类型的,结果其实就是两个long相加,result是long类型的。
案例四:
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类型的。
二、强制转换
定义:如果要把一个取值范围大的数据或者变量赋值给另一个取值范围小的变量。是不允许直接操作。
如果一定要这么干,就需要加入强制转换。
书写格式:
目标数据类型 变量名 = (目标数据类型)被强转的数据;
(要转成什么类型的,那么就在小括号中写什么类型就可以了)
案例:
public class OperatorDemo2 {
public static void main(String[] args) {
double a = 12.3;
int b = (int) a;
System.out.println(b);//12
}
}
注意点:
强制转换有可能会导致数据发生错误。(数据的精度丢失)
总结
本文章旨在讲述隐式转换和强制转换的概念以及使用方法,养成记笔记习惯,以便后续查询学习内容。