八种数据类型
类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验。
int 和 long/double 相互赋值
long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.
double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.
int 和 boolean 相互赋值
int 和 boolean 是毫不相干的两种类型, 不能相互赋值.
使用强制类型转换
使用 (类型) 的方式可以将 double 类型强制转成 int. 但是
- 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部
分被忽略. - 强制类型转换不是一定能成功, 互不相干的类型之间无法强转
类型转换小结
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
- 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.
数值提升
int 和 long 混合运算
当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类
型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.
byte 和 byte 的运算
byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会
先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.