https://segmentfault.com/a/1190000023264152
自动转换规则有如下几个
- 布尔类型boolean不存在隐式转换为其他类型(非自动封装类型)
- 整数类型的自动提升
- byte -> (short/char) -> int -> long (自动提升链)
- 表示范围低的数据类型可隐式自动提升为表示范围高的数据类型(byte b = 1; short s = b; );无编译错误
- short 和 char 都是16位,但是不能隐式转换
- 字符型数据向整型数据的自动转换
- char是无符号类型,表示范围在(0~2^16-1),可隐式转为int或long类型
- 整型、字符型数据都可向浮点型的自动转换
- 因为浮点型能保存的有效数字是限制的,需要考虑转换后的有效位问题
https://segmentfault.com/img/remote/1460000023264156#id=IQ3op&originHeight=399&originWidth=732&originalType=binary&ratio=1&status=done&style=none
- 浮点型数据的自动提升
- float转double存在精误差问题,double如果强制转float则存在精度丢失问题
https://segmentfault.com/img/remote/1460000023264157#id=bkYv8&originHeight=440&originWidth=732&originalType=binary&ratio=1&status=done&style=none
Long 转 int 的问题
short s1 = 1; s1 = s1 + 1;有错吗? short s1 = 1; s1 += 1;有错吗?
不同的基本类型强制转换,可能会产生什么问题
float f = 3.4; 是否正确?
3*0.1 == 0.3 将会返回什么?true 还是 false?
能否在不进行强制转换的情况下将一个double值赋值给long类型的变量