数据类型转换
1 自动类型转换(隐式转换)
long num = 100; 其中100默认为int,左右类型不一样,自动转化为long型
特点:代码不需要特殊处理,自动发生转换
规则:数据范围从小的转换成大的
注意:float范围比long大
2 强制类型转换(显式转换)
int num = 100L; 报错,100L范围比int大,不能自动转换
int num = (int)100L;先将100L强制转换成int型再赋值
注意事项:
- 一般不推荐强制转换,可能发生数据溢出或者精度缺失
- 整型 数据溢出 int num = 6000000000L; 60亿超出int范围,会报错,int 21亿左右
int num = (int)6000000000L; 60亿强制转化为int型,不报错,但是num数据不是60亿,发生了数据溢出
- 小数 精度缺失 int num = (int)3.5; 结果为3,丢掉小数部分,不是四舍五入
2.byte ,short , char 可以进行数学运算
char A = ‘A’; 输出时结果为A
输出A+1 时,结果为66,所有数据在底层都是一个二进制数字
char类型在运算时,先变成int类型(翻译)再计算
byte num1 = 40;
byte num2 = 50;
byte result = num1 + num2; 输出result时出错,num1,num2在运算时先变成int型再运算,所以result应为int型
byte result = 5 + 8; 输出result为13,没报错,右边为两个常量,编译后等于byte result = 13;叫做编译器的常量优化
3. 布尔类型不能进行类型转换
补充: byte num = 30;
输出num 结果为30
byte num = 128;
输出num 报错 ,128超过了byte的范围,30从int型赋给byte型没出错,是因为在数据值没超过byte,short,char范围时,
javac编译器会隐含地补上一个(byte)(short) (char)强转
char zifu = 65; 输出zifu为A