前言:
Java是强类型语言,要求赋值或传递时数据类型必须匹配,我们可以利用Java提供的数据类型的转换来消除这种错误
分类
自动转换和强制转换
自动转换
又叫隐式转换,小空间的数据类型可以自动转换成大空间的数据类型,也就是说低精度的数据可以升级成高精度的数据,反之不行
需要满足条件
1.两种类型要相互兼容
2.目标类型的取值范围大于源类型
例子
byte a = 10; short b = a; int c = b; c = a; long d = c; float e = d; double f = e; //以上都是自动类型转换
自动数据类型转换顺序如图
强制转换
强制数据类型转换也称之为显式类型转换,既然有些数据类型不能互相自动进行转换,那么Java提供了强制转换的方法,强制转换的语法就是用圆括号括起你要转换成的目的数据类型:
语法:变量=(目标类型)值;
需要满足两个条件
1.类型要兼容
2.目标数据类型范围要小于源类型范围
例子
/*强制类型转换*/
long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)
System.out.println(l);
/*强制类型转换*/
byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1 + b2);//系统将转换为int型运算,需要强制转换符
System.out.println(b3);
注意数据溢出
int data1= 129;
byte data2=(byte)data1; //-128 -- 127
自动类型提升
含义:两个操作数进行运算,结果类型是操作数范围比较大的操作数对应的类型
面试题
byte a = 1;
byte b = (byte)(a+1);
//a = a+1; //会报错,因为a+1结果类型自动提升为int
a+=1; //相当于:a=(byte)(a+1);
提示:
- boolean型数据不能和其他基本数据类型进行转换;
- char型和int型数据可以互换;
- byte、short、char之间不会相互转换,它们三者在计算时首先会转换为int类型;
- 在强制类型转换过程中,源类型的值可能大于目标类型,因此可能造成精度降低或溢出,使用时需注意。