杰瑞科技汇

Java中char与int如何转换?

charint

char 转换为 int,实际上是获取该字符对应的 Unicode 码点(code point),也就是它在 Unicode 字符集中的唯一数字标识。

方法:强制类型转换 (Casting)

这是最直接、最常用的方法,因为 charint 都是数值类型,所以可以直接进行转换。

语法:

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

intchar

int 转换为 char,实际上是使用一个整数来查找并获取它对应的 Unicode 字符。

方法:强制类型转换 (Casting)

同样,可以直接进行强制类型转换。但是有一个非常重要的前提:这个 int 值必须在 char 类型的有效范围内,即 065535 (包括 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

转换方向 方法 示例 说明
charint 强制类型转换 int i = (int) 'A'; 获取字符的 Unicode 码点。'A' 变为 65
intchar 强制类型转换 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 中 charint 的转换!

分享:
扫描分享到社交APP
上一篇
下一篇