外观
类型转换
约 593 字大约 2 分钟
2025-12-27
自动类型转换
类型范围小的变量, 可以直接赋值给类型范围大的变量, 但反之则不行.
比如byte可以直接赋值给int, 但int不能直接赋值给byte, 因为int的范围比byte大.
例子
public class Test {
public static void main(String[] args) {
byte a = 12;
test(a);
}
public static void test(int a) {
System.out.println(a);
}
}如果反过来.
public class Test {
public static void main(String[] args) {
int a = 12;
test(a);
}
public static void test(byte a) {
System.out.println(a);
}
}报错: java: 不兼容的类型: 从int转换到byte可能会有损失.
执行原理
byte是8位,int是32位,int的范围比byte大, 所以可以直接赋值.int是32位,byte是8位,int的范围比byte大, 不能直接赋值.int的范围是-2147483648到2147483647,byte的范围是-128到127, 所以不能直接赋值.byte的范围小于int的范围, 因此在赋值时需要进行类型转换.int的范围大于byte的范围, 因此在赋值时不需要进行类型转换.
强制类型转换
类型范围大的变量, 可以强制转换为类型范围小的变量, 但反之则不行.
例子
public class Test {
public static void main(String[] args) {
int a = 12;
test((byte) a);
}
public static void test(byte a) {
System.out.println(a);
}
}这个例子中, 方法会打印出12, 因为int的值在byte的范围内.
但是如果我们将int的值改为128, 就会打印出-128, 因为byte的范围是-128到127, 所以会发生溢出.
注意
强制类型转换会导致数据溢出(丢失), 需要谨慎使用!
浮点型强转成整数型, 会直接丢失小数部分.
表达式的自动类型提升
提示
什么是表达式: 表达式是由操作数和运算符组成的, 例如a + b, a * b, a / b等.
在表达式中, 小范围类型的变量, 会自动转换成表达式中较大范围的类型, 再进行计算.
注意
- 表达式的最终结果类型由表达式中的最高类型决定.
- 在表达式中,
byte,short,char是 直接转换成int类型参与运算的.
版权所有
版权归属:Erhai-lake