核心概念
char: 在 Java 中是一个 16 位(2 字节)的 Unicode 字符,它的取值范围是'\u0000'(0) 到'\uffff'(65535)。int: 在 Java 中是一个 32 位(4 字节)的整数。
char 可以被看作是整数的一种特殊形式,因此它们之间的转换是隐式和显式的。

char 转 int (将字符转换为它的 ASCII/Unicode 码点)
将一个 char 转换为 int,实际上是获取该字符在 Unicode 字符集中的码点,字符 'A' 的码点是 65。
隐式类型转换(自动提升)
因为 char 是 16 位,而 int 是 32 位,所以将 char 赋值给 int 时,Java 会自动进行类型提升,无需任何强制转换。
public class CharToIntExample {
public static void main(String[] args) {
char myChar = 'A'; // 字符 'A'
// 隐式转换:char 自动提升为 int
int myInt = myChar;
System.out.println("字符: " + myChar); // 输出: 字符: A
System.out.println("转换后的整数 (Unicode 码点): " + myInt); // 输出: 转换后的整数 (Unicode 码点): 65
// 另一个例子
char digitChar = '9';
int digitInt = digitChar;
System.out.println("字符: " + digitChar); // 输出: 字符: 9
System.out.println("转换后的整数 (Unicode 码点): " + digitInt); // 输出: 转换后的整数 (Unicode 码点): 57
}
}
显式类型转换(强制转换)
虽然隐式转换已经足够,但你也可以使用强制转换 (int) 来明确表达你的意图,这在代码中也是一种常见的写法。
public class CharToIntExplicitExample {
public static void main(String[] args) {
char myChar = 'B';
// 显式强制转换
int myInt = (int) myChar;
System.out.println("字符: " + myChar); // 输出: 字符: B
System.out.println("转换后的整数 (Unicode 码点): " + myInt); // 输出: 转换后的整数 (Unicode 码点): 66
}
}
int 转 char (将整数转换为对应的字符)
将一个 int 转换为 char,是将该整数作为 Unicode 码点,查找对应的字符。需要注意的是,这个整数必须在 char 的有效范围内(0 到 65535),否则会截断高位数据或导致编译错误。

显式类型转换(强制转换)
这是最直接和常用的方法,你必须使用 (char) 进行强制转换,因为 int 的范围比 char 大,Java 不会自动进行可能丢失信息的转换。
public class IntToCharExample {
public static void main(String[] args) {
int myInt1 = 65;
int myInt2 = 97;
// 强制转换 int 到 char
char myChar1 = (char) myInt1;
char myChar2 = (char) myInt2;
System.out.println("整数 65 对应的字符: " + myChar1); // 输出: 整数 65 对应的字符: A
System.out.println("整数 97 对应的字符: " + myChar2); // 输出: 整数 97 对应的字符: a
// 处理数字字符
int digitInt = 5;
char digitChar = (char) digitInt;
System.out.println("整数 5 对应的字符: " + digitChar); // 输出: 整数 5 对应的字符: (一个不可见的控制字符)
// 正确地将数字字符 '5' 转换为整数 5
// '5' 的码点是 53
int actualDigitValue = digitChar - '0'; // 53 - 48 = 5
System.out.println("字符 '5' 对应的数字值: " + actualDigitValue); // 输出: 字符 '5' 对应的数字值: 5
}
}
重要提示: 当你处理 '0' 到 '9' 的字符时,如果你想把它们转换成 0 到 9 的数字,不能直接 (int)'0',因为你会得到 48,正确的做法是利用字符在 Unicode 表中连续的特性,进行减法运算:
char c = '5';
int num = c - '0'; // 结果是 5
使用 Character.forDigit() 方法
这是一个非常实用的方法,特别是当你想把一个数字(0-9)转换成对应的字符时,它更安全,因为它可以检查输入是否在有效范围内。
public class ForDigitExample {
public static void main(String[] args) {
int digit = 7;
int radix = 10; // 十进制
// 将数字 7 转换为字符 '7'
char charFromDigit = Character.forDigit(digit, radix);
System.out.println("数字 " + digit + " 转换为字符: " + charFromDigit); // 输出: 数字 7 转换为字符: 7
// 尝试转换一个无效的数字
int invalidDigit = 12;
char invalidChar = Character.forDigit(invalidDigit, radix);
if (invalidChar == 0) { // 如果转换失败,方法会返回 '\u0000' (即 char 0)
System.out.println("数字 " + invalidDigit + " 无法在 " + radix + " 进制中表示为单个字符。");
}
}
}
总结与最佳实践
| 转换方向 | 方法 | 示例 | 说明 |
|---|---|---|---|
char → int |
隐式转换 | int i = 'A'; |
推荐,代码简洁。 |
| 显式转换 | int i = (int) 'A'; |
也可以,意图明确。 | |
int → char |
强制转换 | char c = (char) 65; |
最常用的方法。 |
Character.forDigit() |
char c = Character.forDigit(7, 10); |
适用于将数字(0-9)转为字符,更安全。 |
常见场景
-
遍历字母表:
(图片来源网络,侵删)for (char c = 'A'; c <= 'Z'; c++) { int codePoint = c; // 自动获取码点 System.out.println(c + ": " + codePoint); } -
检查字符是否为数字:
char c = '5'; if (c >= '0' && c <= '9') { int num = c - '0'; // 将字符 '5' 转换为数字 5 System.out.println("这是一个数字: " + num); } -
从字符串中获取字符的 ASCII 码:
String str = "Hello"; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); int ascii = ch; System.out.println("字符 '" + ch + "' 的码点是: " + ascii); }
希望这个详细的解释能帮助你完全理解 Java 中 int 和 char 的转换!
