(一 )自动类型转换
(1)类型范围小的变量可以直接赋值给类型范围大的变量
//自动类型转换执行原理
byte a=12; a:00001100 (byte:8位的二进制)
int b=a; b:00000000 00000000 00000000 00001100 (int:32位的二进制)
System.out.println(b);//12
自动类型转换的其他形式:
byte(1个字节)->short(2个字节)->int(4个字节)->long(8个字节)->float(4个字节)->double(8个字节)
char(2个字节)->int->long->float->double
//1个字节有8个bit
(二)表达式的自动类型转换
用于解决不同类型的变量或者数据一起运算的问题
(1)注意事项:
表达式的最终结果类型由表达式中的最高类型决定。
byte a=10;
int b=20;
long c=30;
long rs=a+b+c;
System.out.println(rs);//测试最终结果是否是最高类型(long)决定
//示例2
对于a+b+1.0 ,因为1.0是double类型所以最终结果需要用
在表达式中,byte、short、char是直接转换成int类型参与运算的。
byte i=10;
short j=30;
int rs3=i+i; //注意最终计算结果是int变量
//面试题
byte b1=10;
byte b2=20;
b3=b1+b2;问b3是什么类型
由于在表达式中,byte、short、char是直接转换成int类型参与运算的。,所以b3为Int类型。
(三)强制类型转换(自己对结果负责)
针对:需要将大范围类型变量赋值给小范围类型变量的场景;
int a=10; // byte b=a;//报错,说明大范围类型变量不能直接赋值给小范围类型变量,只能使用强制类型转换//强制转换公式:数据类型 变量1=(数据类型)变量2、数据byte b=(byte)a;//也可以用快捷键ALt+回车,选择第一个报错信息,再回车System.out.println(b);
int c=10000; byte s= (byte) c; System.out.println("int转换成byte后的值:"); System.out.println(s);//16,高位被截断导致错误
浮点数强转成整形,直接丢掉小数部分,保留整数部分返回:
float q= 12.5F;//Java 中,float 类型的字面量需要一个后缀 f 或 F 来明确表示它是一个浮点数 //double类型则不用加int w=(int)q; System.out.println(w); //12
注意事项:
1:强制类型转换可能造成数据丢失/溢出
2:浮点数强转成整形,直接丢掉小数部分,保留整数部分返回