char 转 int
将 char 转换为 int,实际上是获取该字符对应的 Unicode 码点(code point),也就是它在 Unicode 字符集中的唯一数字标识。
方法:强制类型转换 (Casting)
这是最直接、最常用的方法,因为 char 和 int 都是数值类型,所以可以直接进行转换。
语法:
int intValue = (int) charValue;
示例代码:
public class CharToIntExample {
public static void main(String[] args) {
char ch1 = 'A';
char ch2 = '0'; // 数字字符 '0'
char ch3 = '中'; // 一个中文字符
// 将 char 强制转换为 int
int int1 = (int) ch1;
int int2 = (int) ch2;
int int3 = (int) ch3;
System.out.println("字符 '" + ch1 + "' 的 Unicode 码点是: " + int1); // 输出: 65
System.out.println("字符 '" + ch2 + "' 的 Unicode 码点是: " + int2); // 输出: 48
System.out.println("字符 '" + ch3 + "' 的 Unicode 码点是: " + int3); // 输出: 20013
}
}
解释:
'A'在 ASCII 和 Unicode 中都对应数字65。'0'(数字字符) 在 ASCII 和 Unicode 中都对应数字48。'中'是一个中文字符,它的 Unicode 码点是20013。
int 转 char
将 int 转换为 char,实际上是使用一个整数来查找并获取它对应的 Unicode 字符。
方法:强制类型转换 (Casting)
同样,可以直接进行强制类型转换。但是有一个非常重要的前提:这个 int 值必须在 char 类型的有效范围内,即 0 到 65535 (包括 65535) 之间,因为 char 是一个 16 位无符号类型。
语法:
char charValue = (char) intValue;
示例代码:
public class IntToCharExample {
public static void main(String[] args) {
int int1 = 65;
int int2 = 48;
int int3 = 20013;
int int4 = 97; // 小写字母 'a' 的码点
// 将 int 强制转换为 char
char ch1 = (char) int1;
char ch2 = (char) int2;
char ch3 = (char) int3;
char ch4 = (char) int4;
System.out.println("整数 " + int1 + " 对应的字符是: " + ch1); // 输出: A
System.out.println("整数 " + int2 + " 对应的字符是: " + ch2); // 输出: 0
System.out.println("整数 " + int3 + " 对应的字符是: " + ch3); // 输出: 中
System.out.println("整数 " + int4 + " 对应的字符是: " + ch4); // 输出: a
}
}
重要注意事项
范围限制
char 的取值范围是 [0, 65535],如果你尝试将一个超出这个范围的 int 值转换为 char,结果会发生 “溢出” (wrap-around),得到一个无意义的字符。
示例:
public class IntToCharOverflowExample {
public static void main(String[] args) {
int largeInt = 65536; // 超出了 char 的最大值 65535
// 发生溢出,65536 % 65536 = 0,所以结果会是字符 '\u0000' (空字符)
char ch = (char) largeInt;
System.out.println((int) ch); // 输出: 0
System.out.println("字符是: '" + ch + "'"); // 输出: ' ' (看起来是空的)
}
}
为了避免这个问题,在转换前最好进行检查:
int myInt = 65536;
if (myInt >= 0 && myInt <= Character.MAX_VALUE) {
char ch = (char) myInt;
// 安全转换
} else {
System.out.println("整数超出 char 类型的范围,无法转换。");
}
ASCII 字符与数字字符的混淆
这是一个非常常见的编程错误。
'A'是字符,其int值是65。'0'(数字字符) 是字符,其int值是48。
如果你想把一个数字字符(如 '5')转换成它代表的数字(5),不能直接用 (int) 转换。
错误示例:
char digitChar = '5'; int wrongNumber = (int) digitChar; // wrongNumber 的值会是 53,而不是 5 System.out.println(wrongNumber); // 输出 53
正确方法:
应该使用 Character.getNumericValue() 方法或者进行算术运算。
char digitChar = '5';
// 方法1: 使用 Character.getNumericValue()
int correctNumber1 = Character.getNumericValue(digitChar);
// 方法2: 通过算术运算 (利用字符在ASCII表中连续的特性)
// '5' - '0' = 53 - 48 = 5
int correctNumber2 = digitChar - '0';
System.out.println("正确数字 (方法1): " + correctNumber1); // 输出 5
System.out.println("正确数字 (方法2): " + correctNumber2); // 输出 5
| 转换方向 | 方法 | 示例 | 说明 |
|---|---|---|---|
char → int |
强制类型转换 | int i = (int) 'A'; |
获取字符的 Unicode 码点。'A' 变为 65。 |
int → char |
强制类型转换 | char c = (char) 65; |
根据 Unicode 码点获取字符。65 变为 'A'。 |
'0' → 0 |
Character.getNumericValue() |
int i = Character.getNumericValue('0'); |
获取字符所代表的数字值。'0' 变为 0。 |
'0' → 0 |
算术运算 | int i = '5' - '0'; |
利用字符在 ASCII/Unicode 表中的连续性计算。 |
希望这个详细的解释和示例能帮助你完全理解 Java 中 char 和 int 的转换!
