一、自动类型转换
转换的过程自动发生
规则:小——>大
byte->short->int->long->float->double
char类型识别为int,可以转成int,不可自动转成byte、short
二、强制类型转换
转换的过程强制发生
规则:大——>小
语法:类型 变量名 = (类型)值;
int i = 10; short s = 5; i = s; // 正确,自动转换 s = i; // 报错,精度丢失,需要强制转换 long l3 = 1000.9f; // 报错,小数转为整数,精度丢失,需要强制转换 double d = 1.5f; // 正确,1.5f识别为float类型,自动转换 float f1 = 100L; // 正确,整数部分可以直接赋值给float整数部分,自动转换 float f2 = 100.9; // 报错,100.9默认识别为double,这样转换可能失去小数点,必须强制转换 short s1 = 5; s1 = s1 - 2; // 报错,2被识别为int,损失精度 byte b = 2; s1 = s1 - b; // 报错,char、byte和short运算、比较时以int存储(为了保证不发生溢出现象),赋值损失精度 b = b + 4; // 同理,报错 //没报错的原因: //编译时候,进行检查,看赋值大小是否超过变量的类型所容纳的范围 //如果超过,报错:从int转换到byte可能会有损失,如果没超过,编译通过 byte b1 = 120; byte b2 = 128; // 报错,超过存储范围 char c1 = 'a'; int i1 = c1; // 正确,自动转换 int i2 = 100; char c2 = i2; // 错误: 不兼容的类型: 从int转换到char可能会有损失 int n = 100; char c3 = (char)n; // 正确,强制转换 int m = 12.5*8+2.5*4; // 错误,float到int损失精度 int m2 = (int)(12.5*8+2.5*4); // 正确,加括号保证优先级