char 就是整数
要理解 Java 中的 char 类型,它使用 Unicode 字符集,每个字符都对应一个唯一的码点,这个码点就是一个 16 位的无符号整数(范围从 0 到 65535)。

char 和 int 之间的转换非常直接,就像在 C 语言中一样,因为 char 本质上就是一种整数类型。
char 转 int
将 char 转换为 int,实际上是获取该字符对应的 Unicode 码点(或 ASCII 码)。
自动类型提升(隐式转换)
当 char 参与到算术运算或被赋值给一个 int 类型的变量时,它会自动提升为 int 类型。
public class CharToInt {
public static void main(String[] args) {
char ch = 'A'; // 'A' 的 ASCII 码是 65
// 方法1:直接赋值给 int
int code = ch; // 自动类型提升
System.out.println("字符 '" + ch + "' 的码点是: " + code); // 输出: 字符 'A' 的码点是: 65
// 方法2:参与算术运算
int anotherCode = ch + 0;
System.out.println("字符 '" + ch + "' 的码点是: " + anotherCode); // 输出: 字符 'A' 的码点是: 65
char chineseChar = '中'; // '中' 的 Unicode 码点是 20013
int chineseCode = chineseChar;
System.out.println("字符 '" + chineseChar + "' 的码点是: " + chineseCode); // 输出: 字符 '中' 的码点是: 20013
}
}
强制类型转换(显式转换)
虽然自动转换已经足够,但你也可以使用强制类型转换 (int) 来明确表示你的意图,这在某些复杂的表达式中可以提高代码的可读性。

char ch = 'B'; // 'B' 的 ASCII 码是 66
int code = (int) ch; // 显式转换,效果与方法一相同
System.out.println("字符 '" + ch + "' 的码点是: " + code); // 输出: 字符 'B' 的码点是: 66
int 转 char
将 int 转换为 char,实际上是寻找该整数码点所对应的 Unicode 字符。
强制类型转换(显式转换)
这是最常用、最直接的方法,使用 (char) 将 int 强制转换为 char。
重要: 只有在 int 的值在 char 的有效范围内(0 到 65535)时,转换才有意义,如果超出这个范围,可能会得到一个不可预期的字符(因为高16位会被截断)。
public class IntToChar {
public static void main(String[] args) {
// 情况1:将 ASCII 码转换为字符
int asciiCode = 65;
char ch1 = (char) asciiCode;
System.out.println("码点 " + asciiCode + " 对应的字符是: " + ch1); // 输出: 码点 65 对应的字符是: A
// 情况2:将 Unicode 码点转换为字符
int unicodeCode = 20013;
char ch2 = (char) unicodeCode;
System.out.println("码点 " + unicodeCode + " 对应的字符是: " + ch2); // 输出: 码点 20013 对应的字符是: 中
// 情况3:处理超出范围的 int (高16位会被截断)
int largeInt = 0x1F600; // 这是一个有效的 Unicode 表情符号码点
char emoji = (char) largeInt;
System.out.println("码点 " + largeInt + " 对应的字符是: " + emoji); // 输出: 码点 128512 对应的字符是: 😀
}
}
使用 Character 类的 forDigit() 方法
这是一个特殊情况,当你想把一个 数字(0 到 9)转换成对应的 字符('0' 到 '9')时,可以使用这个方法。

public class IntToCharSpecial {
public static void main(String[] args) {
int number = 5;
int radix = 10; // 十进制
// 将数字 5 转换为字符 '5'
char ch = Character.forDigit(number, radix);
System.out.println("数字 " + number + " 对应的字符是: " + ch); // 输出: 数字 5 对应的字符是: 5
// 转换失败的情况 (number >= radix)
int invalidNumber = 12;
char invalidCh = Character.forDigit(invalidNumber, radix);
System.out.println("数字 " + invalidNumber + " 对应的字符是: " + invalidCh); // 输出: 数字 12 对应的字符是: \u0000 (空字符)
}
}
int 和 char 运算中的转换
在混合运算中,Java 会自动进行类型提升。
示例:计算字母表中的下一个字母
public class CharOperation {
public static void main(String[] args) {
char ch = 'A';
int nextCharInt = ch + 1; // 'A' (65) + 1 = 66
char nextChar = (char) nextCharInt;
System.out.println("字符 '" + ch + "' 的下一个字符是: " + nextChar); // 输出: 字符 'A' 的下一个字符是: B
}
}
运算步骤分析:
ch + 1中,ch是char类型。- 运算符要求两个操作数类型一致。
char会被自动提升为int。 - 实际计算是
65 + 1,结果为int类型的66。 - 将
int类型的66强制转换回char类型,得到字符'B'。
总结表格
| 转换方向 | 方法 | 示例 | 说明 |
|---|---|---|---|
char → int |
自动类型提升 | int code = 'A'; |
获取字符的 Unicode 码点。 |
| 强制类型转换 | int code = (int) 'A'; |
语法正确,但通常不必要,因为自动转换已经足够。 | |
int → char |
强制类型转换 | char ch = (char) 65; |
将整数码点转换为对应的字符。最常用。 |
Character.forDigit() |
char ch = Character.forDigit(5, 10); |
专门用于将数字(0-9)转换为对应的字符('0'-'9')。 |
关键点回顾
char是整数:char类型存储的是字符的 Unicode 码点,它本质上是一个 16 位的无符号整数。char转int:获取码点,通常是自动完成的。int转char:将码点映射回字符,必须使用强制类型转换(char)。- 范围:确保
int的值在0到65535之间,以获得有意义的结果。 Character类:提供了许多实用方法,如forDigit(),用于处理字符和数字之间的特殊转换。
希望这个详细的解释能帮助你完全理解 Java 中 int 和 char 的转换!
