测试你对Java类型转换的掌握程度
自动类型转换只能从小范围类型转换到大范围类型。byte → int 是从8位转换到32位,属于向上转换,可以自动进行。其他选项都是向下转换,需要强制类型转换。
强制类型转换 (int) d 会截断小数部分,只保留整数部分。3.14159 转换为 int 类型后结果是 3,不是四舍五入。
装箱(Boxing)是将基本类型转换为对应的包装类,拆箱(Unboxing)是将包装类转换为基本类型。Java 5.0 开始支持自动装箱和拆箱。
Integer.parseInt() 方法用于将字符串转换为 int 类型。String.valueOf() 是将其他类型转换为字符串,其他选项分别用于转换为 double 和 boolean 类型。
在算术运算中,byte、short、char 类型会自动提升为 int 类型。因此 a + b 的结果是 int 类型,需要用 int 变量接收。
虽然 long 可以自动转换为 float,但 float 的精度有限(23位尾数),大的 long 值转换为 float 时会丢失精度,因此比较结果为 false。
Integer.parseInt("abc") 会抛出 NumberFormatException,因为 "abc" 不是有效的数字格式。其他选项都是将数字转换为字符串,不会抛出异常。
char 类型可以自动转换为 int,转换结果是字符的 Unicode 编码值。但 int 转换为 char 需要强制类型转换,因为可能超出 char 的范围。
Java 对 -128 到 127 范围内的 Integer 对象进行了缓存,所以 a 和 b 指向同一个对象(true)。但 200 超出了缓存范围,c 和 d 是不同的对象(false)。
最佳实践是在类型转换前检查数值范围,确保转换的安全性,避免精度损失和数据溢出。同时要处理可能的转换异常。