- 获取字符的 ASCII (或 Unicode) 码点值:这是最常见的需求,即将字符
'A'转换为其对应的整数值65。 - 将字符表示的数字转换为整数值:即字符
'5'转换为整数5。
获取字符的 ASCII/Unicode 码点值
这是最直接、最常用的方法,在 Java 中,char 类型本质上是 16 位的无符号整数,它表示的是 Unicode 字集中的字符码点,当你将一个 char 赋值给一个 int 类型时,Java 会自动将其码点值(也就是数字)进行转换。

隐式类型转换(直接赋值)
这是最简单的方式,Java 会自动将 char 提升为 int。
public class CharToIntExample {
public static void main(String[] args) {
char ch1 = 'A';
char ch2 = 'a';
char ch3 = '0'; // 字符 '0'
char ch4 = '中'; // 一个中文字符
// 直接将 char 赋值给 int
int int1 = ch1;
int int2 = ch2;
int int3 = ch3;
int int4 = ch4;
System.out.println("字符 'A' 的码点是: " + int1); // 输出: 65
System.out.println("字符 'a' 的码点是: " + int2); // 输出: 97
System.out.println("字符 '0' 的码点是: " + int3); // 输出: 48
System.out.println("字符 '中' 的码点是: " + int4); // 输出: 20013
}
}
原理:char 在 Java 中是 unsigned short 的子集,所以可以直接向上转型为 int。
显式类型转换(强制类型转换)
你也可以使用强制类型转换 (int) 来达到同样的目的,虽然在这里是多余的,但可以明确表达你的意图。
char ch = 'Z';
int intValue = (int) ch;
System.out.println("字符 'Z' 的码点是: " + intValue); // 输出: 90
将字符表示的数字转换为整数值
如果你有一个字符变量,它的值是数字字符('1', '2', '9'),而你想要得到它所代表的数值(1, 2, 9),不能使用上面直接转换的方法,因为 '1' 的码点是 49,而不是 1。

有几种方法可以实现这个转换:
使用 Character.getNumericValue(char) (推荐)
这是最安全、最清晰的方法,专门用于获取字符的数值,它不仅能处理 '0' 到 '9',还能处理十六进制的字符(如 'A', 'a' 等)。
public class CharDigitToIntExample {
public static void main(String[] args) {
char ch1 = '5';
char ch2 = '9';
char ch3 = 'A'; // 十六进制的 10
char ch4 = 'a'; // 十六进制的 10
int num1 = Character.getNumericValue(ch1);
int num2 = Character.getNumericValue(ch2);
int num3 = Character.getNumericValue(ch3);
int num4 = Character.getNumericValue(ch4);
System.out.println("字符 '" + ch1 + "' 的数值是: " + num1); // 输出: 5
System.out.println("字符 '" + ch2 + "' 的数值是: " + num2); // 输出: 9
System.out.println("字符 '" + ch3 + "' 的数值是: " + num3); // 输出: 10
System.out.println("字符 '" + ch4 + "' 的数值是: " + num4); // 输出: 10
}
}
使用减法运算(仅适用于 '0'-'9')
这是一种非常经典和高效的技巧,利用了字符在 ASCII/Unicode 表中连续排列的特性,数字字符 '0' 到 '9' 的码点是连续的。
用任意数字字符减去字符 '0',就能得到它对应的数值。

public class CharSubtractExample {
public static void main(String[] args) {
char ch = '7';
// '7' 的码点是 55, '0' 的码点是 48
// 55 - 48 = 7
int num = ch - '0';
System.out.println("字符 '" + ch + "' 的数值是: " + num); // 输出: 7
}
}
注意:此方法仅适用于 '0' 到 '9' 的字符,如果传入 'A',结果会是 65 - 48 = 17,这通常不是你想要的结果。
使用 String.parseInt() (间接方法)
你也可以先将 char 包装成 String,然后使用 Integer.parseInt() 来解析它。
public class CharParseIntExample {
public static void main(String[] args) {
char ch = '8';
// 将 char 转换为 String,再解析为 int
int num = Integer.parseInt(String.valueOf(ch));
System.out.println("字符 '" + ch + "' 的数值是: " + num); // 输出: 8
}
}
这种方法虽然可行,但比前两种方法更啰嗦,性能也稍差,因为它涉及到了额外的 String 对象创建和解析过程。
总结与对比
| 场景 | 目标 | 推荐方法 | 示例 (char ch = 'A') |
|---|---|---|---|
| 获取字符编码 | 将 'A' 转换为 65 |
直接赋值 | int code = ch; |
| 获取字符编码 | 将 'A' 转换为 65 |
强制转换 | int code = (int) ch; |
| 数字字符转数值 | 将 '5' 转换为 5 |
Character.getNumericValue() |
int num = Character.getNumericValue(ch); |
| 数字字符转数值 | 将 '5' 转换为 5 |
减法运算 | int num = ch - '0'; |
| 数字字符转数值 | 将 '5' 转换为 5 |
Integer.parseInt() |
int num = Integer.parseInt(String.valueOf(ch)); |
如何选择?
- 如果你想得到字符在 Unicode 表中的位置(ASCII 码是其子集),直接用
int code = myChar;即可。 - 如果你想得到字符本身所代表的数字(
'1'->1),首选Character.getNumericValue(),因为它最清晰且功能全面,如果你能确保字符一定是'0'到'9',ch - '0'是一个非常高效且简洁的技巧。
