自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量,不需要在前面添加转换类型,表达式的最终结果类型由表达式中的最高类型决定,在表达式中,byte,short,char都是转换成int来计算的
byte a = 127;
//int b = (int)a;
int b = a;
double e = 0.1;
int f = 5;
int g = f+e; //报错
double g = f+e;//正确
可以得出自动转换类型的其他形式图
1.看见log是8字节,而float4字节就会产生疑问??
float虽然只用到了4个字节,但是浮点数却比long的最大值要大
2.char不是字符类型吗,为什么可以转换为int啊??
因为ASCll编码且字符类型存储在计算机里面是2进制,比如字符a对应在ASCll编码表中对应的是97
补充知识点!
大写字母A-Z对应的ASCII码(十进制)为“65”~“90”
小写字母a-z对应的ASCII码(十进制)为"97"~“122”
随机数表示大写为 (90-65+1)+65
随机数表示小写为 (122-97+1)+97
可以用于生成随机验证码,然后给到前端去渲染进行验证(Random)
强制类型转换
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错
格式: 数据类型 变量1 = (数据类型) 变量2;
int a = 99;
byte b = a; //报错
btye b = (byte)a; //正确
这样操作在范围内可以进行,但是如果超过了范围会造成精度丢失或者溢出
浮点类型转换成整型,会不考虑小数点后面的数,且不是我们认为的四舍五入,而是直接丢失
这个原因可以看我之前写的博客,原码反码补码可以解释这个问题