Skip to content

类型转换(Type Conversion)

字数
791 字
阅读时间
4 分钟

将一种数据类型的值转换为另一种数据类型

理解类型转换对于 Java 编程非常重要,在处理变量赋值、运算时容易遇到错误。

类型转换的基本概念

类型是否自动进行
自动类型转换
强制类型转换

自动类型转换

当把“小范围”的数据赋值给“大范围”的变量时,Java 会自动进行类型转换。

js
byteshortintlongfloatdouble
charint
代码示例
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; // 正确写法

贡献者

撰写