获取字符的 Unicode 码点(数字值)
这是最直接、最常见的转换,在 Java 中,char 类型本质上是 16 位的无符号整数,它使用 Unicode 字符集来表示一个字符,每个字符都对应一个唯一的码点。

当你将一个 char 直接赋值给一个 int 时,Java 会自动进行隐式类型转换,将 char 的 Unicode 码点值赋给 int 变量。
示例代码
public class CharToIntExample {
public static void main(String[] args) {
// 示例1:数字字符 '5'
char charDigit = '5';
int intValue1 = charDigit; // 隐式转换
System.out.println("字符: '" + charDigit + "'");
System.out.println("转换后的 int 值 (Unicode 码点): " + intValue1);
// 输出: 字符: '5'
// 输出: 转换后的 int 值 (Unicode 码点): 53
// 解释:字符 '5' 的 Unicode 码点是 53
System.out.println("--------------------");
// 示例2:大写字母 'A'
char charLetter = 'A';
int intValue2 = charLetter; // 隐式转换
System.out.println("字符: '" + charLetter + "'");
System.out.println("转换后的 int 值 (Unicode 码点): " + intValue2);
// 输出: 字符: 'A'
// 输出: 转换后的 int 值 (Unicode 码点): 65
// 解释:字符 'A' 的 Unicode 码点是 65
System.out.println("--------------------");
// 示例3:中文字符 '中'
char charChinese = '中';
int intValue3 = charChinese; // 隐式转换
System.out.println("字符: '" + charChinese + "'");
System.out.println("转换后的 int 值 (Unicode 码点): " + intValue3);
// 输出: 字符: '中'
// 输出: 转换后的 int 值 (Unicode 码点): 20013
// 解释:字符 '中' 的 Unicode 码点是 20013
}
}
如果你想得到字符在 Unicode 字符集中的编号('A' 是 65, 'B' 是 66),直接进行 int myInt = myChar; 的赋值即可。
将数字字符转换为对应的整数值
你有一个字符 '5',但你想要得到的是数字 5,而不是它的 Unicode 码点 53,这时需要进行显式的转换。
方法 1:使用 Character.getNumericValue()
这是最推荐、最安全的方法,因为它可以处理各种数字字符,包括非 ASCII 字符(如阿拉伯数字、罗马数字等)。

public class CharToNumericValueExample {
public static void main(String[] args) {
char charDigit = '5';
int numericValue = Character.getNumericValue(charDigit);
System.out.println("字符: '" + charDigit + "'");
System.out.println("转换后的数字值: " + numericValue);
// 输出: 字符: '5'
// 输出: 转换后的数字值: 5
System.out.println("--------------------");
// 处理非 ASCII 数字字符
char arabicDigit = '٥'; // 阿拉伯数字 5
int arabicNumericValue = Character.getNumericValue(arabicDigit);
System.out.println("字符: '" + arabicDigit + "'");
System.out.println("转换后的数字值: " + arabicNumericValue);
// 输出: 字符: '٥'
// 输出: 转换后的数字值: 5
}
}
方法 2:使用 ASCII 码值进行数学运算
对于标准的 ASCII 数字字符('0' 到 '9'),你可以利用它们在 ASCII 表中连续排列的特性进行计算。
'0' 的 ASCII 码是 48,'1' 是 49,依此类推,任何一个数字字符减去 '0',就能得到它对应的数值。
public class CharToIntMathExample {
public static void main(String[] args) {
char charDigit = '7';
// 通过减去 '0' 来转换
int intValue = charDigit - '0';
System.out.println("字符: '" + charDigit + "'");
System.out.println("转换后的数字值: " + intValue);
// 输出: 字符: '7'
// 输出: 转换后的数字值: 7
System.out.println("--------------------");
// 验证一下
System.out.println("'0' 的码点是: " + (int)'0'); // 输出 48
System.out.println("'7' 的码点是: " + (int)'7'); // 输出 55
System.out.println("55 - 48 = " + (55 - 48)); // 输出 7
}
}
注意: 这种方法只适用于 '0' 到 '9' 这十个字符,如果用于其他字符(如 'A'),结果将不是你期望的('A' - '0' 会得到 65 - 48 = 17)。
总结与对比
| 转换需求 | 推荐方法 | 示例 | 结果 (当 char = 'A') | 结果 (当 char = '5') |
|---|---|---|---|---|
| 获取 Unicode 码点 | 直接赋值(隐式转换) | int i = myChar; |
65 |
53 |
| 获取数字字符的值 | Character.getNumericValue() |
int i = Character.getNumericValue(myChar); |
-1 (非数字) |
5 |
| 获取数字字符的值 (仅限 '0'-'9') | 减去 '0' | int i = myChar - '0'; |
17 (无意义) |
5 |
实际应用场景
场景:检查一个字符是否为数字,并求和

public class SumOfDigits {
public static void main(String[] args) {
String str = "a1b2c3";
int sum = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
// 方法一:使用 Character.getNumericValue()
if (Character.isDigit(c)) { // 先判断是否为数字字符
int digitValue = Character.getNumericValue(c);
sum += digitValue;
System.out.println("找到数字字符 '" + c + "', 其值为 " + digitValue);
}
/*
// 方法二:使用数学运算 (仅适用于 '0'-'9')
if (c >= '0' && c <= '9') {
int digitValue = c - '0';
sum += digitValue;
System.out.println("找到数字字符 '" + c + "', 其值为 " + digitValue);
}
*/
}
System.out.println("\n所有数字字符的和为: " + sum); // 输出 6 (1+2+3)
}
}
希望这个详细的解释能帮助你完全理解 Java 中 char 到 int 的转换!
