类型转换(Type Conversion)
字数
791 字
阅读时间
4 分钟
将一种数据类型的值转换为另一种数据类型
理解类型转换对于 Java 编程非常重要,在处理变量赋值、运算时容易遇到错误。
类型转换的基本概念
类型 | 是否自动进行 |
---|---|
自动类型转换 | 是 |
强制类型转换 | 否 |
自动类型转换
当把“小范围”的数据赋值给“大范围”的变量时,Java 会自动进行类型转换。
js
byte → short → int → long → float → double
char → int
代码示例
js
int a = 100;
double b = a; // 自动将 int 转换为 double
System.out.println(b); // 输出:100.0
注意事项:
只能从小到大自动转换,byte, short, char是直接转换成int类型参与运算 表达式的最终结果类型由表达式中的最高类型决定。 不会影响精度(除非是浮点数和整数之间)。
强制类型转换
当你试图将一个“大范围”的值赋值给“小范围”的变量时,必须使用强制类型转换(也叫显式转换),否则编译器报错。
js
目标类型 变量名 = (目标类型) 原始值;
查看示例
js
double d = 123.456;
int i = (int) d; // 强制将 double 转换为 int
System.out.println(i); // 输出:123(丢失小数部分)
:::
注意事项:
默认情况下,大范围转小范围是会报错的。 可以强行转换,但是可能会出现数据缺失,例如小数强制转换成整数会去掉小数保留整数。
表达式中的类型提升
在 Java 表达式中,如果操作数的类型不同,Java 会自动将它们提升为统一类型后再进行计算。
- 提升规则如下 byte、short、char 在参与运算时会被自动提升为 int 如果其中一个操作数是 long,整个表达式结果变成 long 如果其中一个操作数是 float,结果变成 float 如果有一个操作数是 double,结果变成 double
示例代码
js
byte x = 10, y = 20;
int z = x + y; // byte 自动提升为 int
System.out.println(z); // 输出:30
===========================
int a = 100;
double b = 3.14;
double result = a + b; // int 提升为 double
System.out.println(result); // 输出:103.14
注意事项:
小范围的变量默认自动转换成大范围类型,在参与运算。 两个byte相加,结果为int。
常见转换
int→double(自动)
js
int a = 100;
double b = a; // OK,自动转换
double → int(强制)
js
double d = 99.9;
int i = (int)d; // 强制转换,结果为 99
char → int(自动)
js
char c = 'A';
int code = c; // 自动转换为 ASCII 码
System.out.println(code); // 输出:65
int → char(强制)
js
int code = 65;
char c = (char)code; // 强制转换
System.out.println(c); // 输出:A
byte + byte → int(表达式提升)
js
byte b1 = 10, b2 = 20;
// byte sum = b1 + b2; // 错误!表达式结果是 int
int sum = b1 + b2; // 正确写法