1.类型转换的依据:取决于数据的取值范围,取值范围大小如下:
byte -> short -> int -> long -> float -> double
char ->
2.注意:
(1)boolean类型不能够参与类型转换
(2)char和byte/short只有交集关系,没有子集关系
3.九种常见的数据类型转换
(1)自动类型转换
将小类型的数据转成大类型的数据, 系统会自动转换
//自动类型转换
float f=23;
System.out.println(f);
(2)强制类型转换
将大类型的数据转换成小类型的数据,会编译报错
解决办法:强制类型转换
格式:目标类型 变量名 = (目标类型) 被转换的类型;
//强制类型转换
float f2=(float) 2.5;
System.out.println(f2);
强制类型转换会出现的问题:
a.精度的丢失
//(1)精度丢失
int i=(int)2.5;
System.out.println(i);
b.数据的溢出
//(2)数据溢出
byte b=(byte)129;
System.out.println(b);
3.byte/short/char特例
当把int类型的数据赋给它们时,如果数据在它们的取值范围内,那编译会允许通过
byte bys=35;
System.out.println(bys);
short sh2=25;
System.out.println(25);
char ch=97;
System.out.println(ch);
4.byte/short 和 char 相互转换,都需要强制类型转换
//byte/short 和 char 相互转换,都需要强制类型转换
byte bts=97;
char ch2=(char)bts;
System.out.println(ch2);
char ch3='A';
byte by3=(byte)ch3;
System.out.println(by3);
5.表达式类型提升
当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换
float flo1=2.3F;
int int1=3;
// int result=flo1+int1;错误,相加的和是float类型
float result=flo1+int1;
6.当byte short char 之间参与运算的时候,底层都会转换成int类型来计算
byte by5=10;
short ss=20;
int ss2=by5+ss;//byte+short=int
7.boolean类型不能够参与运算和转换
boolean bool=false;
//byte by7=(byte)bool; 错误
8.字符串在参与运算中的转换问题,字符串相加是拼接操作
String str="abc";
str=str+1;
System.out.println(str);//abc1
面试题:
计算以下结果:
System.out.println(2 + 2 + "222" + 2 + 2);//422222
9.变量计算和常量计算问题
变量相加,系统无法判断具体的结果,要在运行时才能知道
常量相加,在编译时期,系统就会运算结果
char ch4='a';
byte by4=1;
// char ch5=ch4+by4;//这是错误的,变量相加系统在编译时期不知道结果是多少,无法直接赋值
char ch5='a'+1;
//这样就对了,根据第6点可知,当byte short char 之间参与运算的时候,底层都会转换成int类型来计算,
//所以这边'a'+1的结果是int类型,再根据第3点,byte,short,char特例,当把int类型的数据赋给它们时,
//如果数据在它们的取值范围内,那编译会允许通过.所以在这边 char ch5='a'+1;是成立的