基本方法:强制类型转换
这是最直接、最常用的方法,Java 中,char 类型是 16 位的无符号 Unicode 字符,可以存储一个 Unicode 字符。int 类型是 32 位的有符号整数,你可以将一个 int 值强制转换为 char。

语法:
char c = (char) intValue;
关键点:
(char)是强制类型转换操作符。- 这个转换会将
int值的低 16 位复制给char变量,高 16 位会被丢弃。 int值在char的有效范围内(0 到 65535),转换是成功的。int值超出了char的范围(负数或大于 65535 的正数),转换后的char值将是不可预测的,因为它只取了低 16 位。
注意事项
a. ASCII 字符
当 int 值在 0 到 127 之间时,它对应标准的 ASCII 字符,这是最常见的转换场景之一。
int asciiCode = 65; char charA = (char) asciiCode; System.out.println(charA); // 输出: A int asciiCode2 = 97; char chara = (char) asciiCode2; System.out.println(chara); // 输出: a
b. Unicode 字符
char 本质上就是一个 Unicode 字符,任何在 0 到 65535 范围内的 int 值都可以被转换为一个 char。

// 汉字 '好' 的 Unicode 码是 22909 int unicodeValue = 22909; char chineseChar = (char) unicodeValue; System.out.println(chineseChar); // 输出: 好 // 表情符号 '😊' 的 Unicode 码是 128522 int emojiValue = 128522; char emojiChar = (char) emojiValue; System.out.println(emojiChar); // 输出: 😊
c. 超出范围的 int 值
int 值是负数或者大于 65535,转换会截断高 16 位,结果可能不是你想要的。
// int 值超出了 char 的范围 (0-65535) int largeValue = 70000; // 二进制: 00000000 00000001 00010001 01011000 char c = (char) largeValue; // 只保留低16位: 00010001 01011000, 即 5656 System.out.println((int) c); // 输出: 5656 System.out.println(c); // 输出一个可能无法识别的字符 // int 值为负数 int negativeValue = -1; // 二进制 (补码): 11111111 11111111 11111111 11111111 char c2 = (char) negativeValue; // 只保留低16位: 11111111 11111111, 即 65535 System.out.println((int) c2); // 输出: 65535 System.out.println(c2); // 输出: (一个特殊的控制字符)
完整示例代码
下面是一个综合示例,展示了各种情况下的 int 到 char 的转换。
public class IntToCharExample {
public static void main(String[] args) {
// 1. 转换为 ASCII 字符
int asciiA = 65;
char charFromAscii = (char) asciiA;
System.out.println("ASCII 65 -> char: " + charFromAscii); // A
// 2. 转换为数字字符
int digitInt = 9;
char charFromDigit = (char) digitInt;
System.out.println("数字 9 -> char: " + charFromDigit); // 9 (注意:不是字符'9')
// 如何得到字符 '9'?
// '0' 的 ASCII 码是 48,48 + 9 = 57
char charNine = (char) (48 + 9);
System.out.println("通过计算得到字符 '9': " + charNine); // 9
// 3. 转换为 Unicode 字符 (汉字)
int unicodeGood = 22909;
char charFromUnicode = (char) unicodeGood;
System.out.println("Unicode 22909 -> char: " + charFromUnicode); // 好
// 4. 处理超出范围的 int 值
int outOfRangeInt = 70000;
char charFromOutOfRange = (char) outOfRangeInt;
System.out.println("超出范围的 int 70000 -> char: " + charFromOutOfRange);
System.out.println("该 char 的 int 值: " + (int) charFromOutOfRange); // 5656
// 5. 处理负数 int 值
int negativeInt = -1;
char charFromNegative = (char) negativeInt;
System.out.println("负数 int -1 -> char: " + charFromNegative);
System.out.println("该 char 的 int 值: " + (int) charFromNegative); // 65535
}
}
相关场景与技巧
将数字 0-9 转换为字符 '0'-'9'
这是一个非常常见的面试题,直接转换 (char) 9 得到的是换行符 \t 的 ASCII 码 9,而不是字符 '9'。
正确方法:利用字符 '0' 的 ASCII 码

int number = 5; // '0' 的 ASCII 码是 48,48 + 5 = 53,即 '5' 的 ASCII 码 char digitChar = (char) (number + '0'); // 或者 (char) (number + 48) System.out.println(digitChar); // 输出: 5
将 char 转换回 int
如果你有一个 char,想得到它对应的 ASCII 码或 Unicode 码,只需要将其强制转换为 int 即可。
char myChar = 'A';
int myInt = (int) myChar; // 或者直接 int myInt = myChar;
System.out.println("字符 'A' 的 int 值是: " + myInt); // 输出: 65
| 转换目标 | 方法 | 示例 | 说明 |
|---|---|---|---|
int -> char (基本) |
强制类型转换 | char c = (char) 65; |
直接转换,取 int 的低 16 位。 |
int -> char (数字转字符) |
加上 '0' 的码值 |
char c = (char) (5 + '0'); |
将数字 0-9 转换为对应的字符 '0'-'9'。 |
char -> int |
强制类型转换或直接赋值 | int i = (int) 'A'; 或 int i = 'A'; |
获取字符的 ASCII 或 Unicode 码值。 |
核心要点:
- 使用
(char)进行强制转换。 - 理解
char是 16 位无符号整数,范围是 0 到 65535。 - 注意处理超出范围的
int值和将数字转换为数字字符的特殊情况。
