类型转换分为两类:
- 隐式类型转换
- 强制类型转换
1 隐式类型转换
在一定条件下,自动执行。
1.1 触发条件
- 把一个表示数据范围小的变量赋值给另一个表示数据范围大的变量。
- 不同类型的数一起运算,会进行数据类型提升。
byte
、short
、char
变量参与运算,都将被提升到int
类型。- 算式中,每个数都会转为数据范围最大的数据类型顺序:
int
<long
<float
<double
1.2 说明
boolean
类型不能与其他基本数据类型相互转换。
1.3 示例
double num = 10; // 将 int 10 赋值给 double 类型
System.out.println(num); // 输出 10.0
2 强制类型转换
把一个表示数据范围大的数值变量赋值给另一个表示数据范围小的变量,可能导致溢出或损失精度。
浮点数到整数会直接舍弃小数,不是四舍五入。
2.1 格式
目标数据类型 变量名 = (目标数据类型) 表达式;
2.2 示例
int a = (int) 5.5;
3 常量优化机制
在编译时,只有 int
常量的计算,结果会自动类型转换。
若不兼容则编译不通过。
3.1 示例
byte d = 3 + 4; // 正确。常量优化机制。
byte a = 3;
byte b = 4;
byte c = a + b; // 错误。包含 byte 变量,会提升为 int 类型。
byte e = a + 4; // 错误。包含 byte 变量,会提升为 int 类型。
byte b2 = 50 + 50 + 50; // 报错,类型不兼容。
3.2 String 与基本类型的转换
3.2.1 基本类型→String
- 方式一:直接在数字后加一个空串
""
。 - 方式二:
String.valueOf(……)
。
3.2.2 String→基本类型
除了 Character
类之外,其他所有包装类都具有 parseXxx
静态方法可以将字符串参数转换为对应的基本类型:
static byte parseByte(String s)
:将字符串参数转换为对应的byte
基本类型。static short parseShort(String s)
:将字符串参数转换为对应的short
基本类型。static int parseInt(String s)
:将字符串参数转换为对应的int
基本类型。
valueOf
方法则转为包装类:
static Integer valueOf(String s)
:将字符串参数转换为Integer
。
3.2.3 注意
- 如果字符串超过 3333 位,不能转化为
Integer
。 - 如果字符串超过 6565 位,不能转化为
Long
。 - 如果字符串超过 500000001500000001 位,不能转化为
BigInteger
。 - 如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出
java.lang.NumberFormatException
异常。