在 Java 中,基本数据类型的自动转换(也叫隐式类型转换或提升)是指 小范围的数据类型可以自动转换为更大范围的数据类型,而不需要额外的类型转换代码。这种转换主要发生在数值类型之间,包括:
byte
、short
、int
、long
float
、double
char
❗ 注意: boolean
类型不能自动转换为其他任何类型,也不能由其他类型自动转换成 boolean
。
Java 将基本数据类型按照它们的数据范围从小到大排列如下:
byte → short → char → int → long → float → double
✅ 自动类型转换发生的条件:
public class AutoTypeConversionExample {
public static void main(String[] args) {
byte b = 10; // byte 类型变量
short s = b; // byte 自动转换为 short
int i = s; // short 自动转换为 int
long l = i; // int 自动转换为 long
System.out.println("byte 值: " + b);
System.out.println("short 值: " + s);
System.out.println("int 值: " + i);
System.out.println("long 值: " + l);
}
}
✅ 讲解要点:
byte
→ short
→ int
→ long
是符合自动转换的规则的。long
转 byte
,就会报错。尝试以下代码会报错:
byte b2 = l; // 编译错误:需要强制类型转换
public class AutoTypeConversionFloatExample {
public static void main(String[] args) {
int i = 10;
float f = i; // int 自动转换为 float
double d = f; // float 自动转换为 double
System.out.println("float 值: " + f);
System.out.println("double 值: " + d);
}
}
✅ 讲解要点:
int
→ float
是自动的,因为 float
范围比 int
更大。float
只能存储大约 7 位十进制有效数字。public class AutoTypeConversionCharExample {
public static void main(String[] args) {
char c = 'A'; // 'A' 的 Unicode 码点是 65
int i = c; // char 自动转换为 int
System.out.println("char 类型的值: " + c);
System.out.println("char 转换成 int 后的值: " + i); // 打印 65
}
}
✅ 讲解要点:
char
本质上是无符号的整数类型,它存储的是字符的 Unicode 编码。char
可以自动转换为 int
,显示出对应的 Unicode 编码值。接下来,我们来看 强制类型转换,也称为 显式类型转换。
✅ 语法格式:
(目标类型) 变量名;
(目标类型) 表达式;
public class ForcedTypeConversionExample {
public static void main(String[] args) {
long l = 1234567890L;
int i = (int) l; // long 强制转换为 int
System.out.println("原始 long 值: " + l);
System.out.println("强制转换后的 int 值: " + i);
}
}
✅ 讲解要点:
long
转 int
是不安全的,因为可能会 数据溢出。int
范围,结果会截断。public class FloatToIntConversion {
public static void main(String[] args) {
double d = 3.14159;
int i = (int) d; // double 强制转换为 int,丢弃小数部分
System.out.println("原始 double 值: " + d);
System.out.println("强制转换后的 int 值: " + i);
}
}
✅ 讲解要点:
虽然这不是基本数据类型的转换,但了解一下也是很重要的:
class Animal {}
class Dog extends Animal {}
public class AnimalToDogConversion {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // 向上转型
Dog myDog = (Dog) myAnimal; // 向下转型
System.out.println("转换成功,myDog 是一个 Dog 对象");
}
}
✅ 讲解要点:
Dog
转 Animal
)是自动的。Animal
转 Dog
)需要显式写 (Dog)
。ClassCastException
。✅ 自动转换: 小转大,无需额外代码;
✅ 强制转换: 大转小,需要显式标注,可能损失数据;
✅ 浮点转整型: 舍弃小数部分;
✅ 对象类型转换: 向上自动,向下需强制。