杰瑞科技汇

Java中int与char如何互相转换?

char 就是整数

要理解 Java 中的 char 类型,它使用 Unicode 字符集,每个字符都对应一个唯一的码点,这个码点就是一个 16 位的无符号整数(范围从 065535)。

Java中int与char如何互相转换?-图1
(图片来源网络,侵删)

charint 之间的转换非常直接,就像在 C 语言中一样,因为 char 本质上就是一种整数类型。


charint

char 转换为 int,实际上是获取该字符对应的 Unicode 码点(或 ASCII 码)

自动类型提升(隐式转换)

char 参与到算术运算或被赋值给一个 int 类型的变量时,它会自动提升为 int 类型。

public class CharToInt {
    public static void main(String[] args) {
        char ch = 'A'; // 'A' 的 ASCII 码是 65
        // 方法1:直接赋值给 int
        int code = ch; // 自动类型提升
        System.out.println("字符 '" + ch + "' 的码点是: " + code); // 输出: 字符 'A' 的码点是: 65
        // 方法2:参与算术运算
        int anotherCode = ch + 0;
        System.out.println("字符 '" + ch + "' 的码点是: " + anotherCode); // 输出: 字符 'A' 的码点是: 65
        char chineseChar = '中'; // '中' 的 Unicode 码点是 20013
        int chineseCode = chineseChar;
        System.out.println("字符 '" + chineseChar + "' 的码点是: " + chineseCode); // 输出: 字符 '中' 的码点是: 20013
    }
}

强制类型转换(显式转换)

虽然自动转换已经足够,但你也可以使用强制类型转换 (int) 来明确表示你的意图,这在某些复杂的表达式中可以提高代码的可读性。

Java中int与char如何互相转换?-图2
(图片来源网络,侵删)
char ch = 'B'; // 'B' 的 ASCII 码是 66
int code = (int) ch; // 显式转换,效果与方法一相同
System.out.println("字符 '" + ch + "' 的码点是: " + code); // 输出: 字符 'B' 的码点是: 66

intchar

int 转换为 char,实际上是寻找该整数码点所对应的 Unicode 字符

强制类型转换(显式转换)

这是最常用、最直接的方法,使用 (char)int 强制转换为 char

重要: 只有在 int 的值在 char 的有效范围内(065535)时,转换才有意义,如果超出这个范围,可能会得到一个不可预期的字符(因为高16位会被截断)。

public class IntToChar {
    public static void main(String[] args) {
        // 情况1:将 ASCII 码转换为字符
        int asciiCode = 65;
        char ch1 = (char) asciiCode;
        System.out.println("码点 " + asciiCode + " 对应的字符是: " + ch1); // 输出: 码点 65 对应的字符是: A
        // 情况2:将 Unicode 码点转换为字符
        int unicodeCode = 20013;
        char ch2 = (char) unicodeCode;
        System.out.println("码点 " + unicodeCode + " 对应的字符是: " + ch2); // 输出: 码点 20013 对应的字符是: 中
        // 情况3:处理超出范围的 int (高16位会被截断)
        int largeInt = 0x1F600; // 这是一个有效的 Unicode 表情符号码点
        char emoji = (char) largeInt;
        System.out.println("码点 " + largeInt + " 对应的字符是: " + emoji); // 输出: 码点 128512 对应的字符是: 😀
    }
}

使用 Character 类的 forDigit() 方法

这是一个特殊情况,当你想把一个 数字09)转换成对应的 字符'0''9')时,可以使用这个方法。

Java中int与char如何互相转换?-图3
(图片来源网络,侵删)
public class IntToCharSpecial {
    public static void main(String[] args) {
        int number = 5;
        int radix = 10; // 十进制
        // 将数字 5 转换为字符 '5'
        char ch = Character.forDigit(number, radix);
        System.out.println("数字 " + number + " 对应的字符是: " + ch); // 输出: 数字 5 对应的字符是: 5
        // 转换失败的情况 (number >= radix)
        int invalidNumber = 12;
        char invalidCh = Character.forDigit(invalidNumber, radix);
        System.out.println("数字 " + invalidNumber + " 对应的字符是: " + invalidCh); // 输出: 数字 12 对应的字符是: \u0000 (空字符)
    }
}

intchar 运算中的转换

在混合运算中,Java 会自动进行类型提升。

示例:计算字母表中的下一个字母

public class CharOperation {
    public static void main(String[] args) {
        char ch = 'A';
        int nextCharInt = ch + 1; // 'A' (65) + 1 = 66
        char nextChar = (char) nextCharInt;
        System.out.println("字符 '" + ch + "' 的下一个字符是: " + nextChar); // 输出: 字符 'A' 的下一个字符是: B
    }
}

运算步骤分析:

  1. ch + 1 中,chchar 类型。
  2. 运算符要求两个操作数类型一致。char 会被自动提升为 int
  3. 实际计算是 65 + 1,结果为 int 类型的 66
  4. int 类型的 66 强制转换回 char 类型,得到字符 'B'

总结表格

转换方向 方法 示例 说明
charint 自动类型提升 int code = 'A'; 获取字符的 Unicode 码点。
强制类型转换 int code = (int) 'A'; 语法正确,但通常不必要,因为自动转换已经足够。
intchar 强制类型转换 char ch = (char) 65; 将整数码点转换为对应的字符。最常用
Character.forDigit() char ch = Character.forDigit(5, 10); 专门用于将数字(0-9)转换为对应的字符('0'-'9')。

关键点回顾

  1. char 是整数char 类型存储的是字符的 Unicode 码点,它本质上是一个 16 位的无符号整数。
  2. charint:获取码点,通常是自动完成的。
  3. intchar:将码点映射回字符,必须使用强制类型转换 (char)
  4. 范围:确保 int 的值在 065535 之间,以获得有意义的结果。
  5. Character:提供了许多实用方法,如 forDigit(),用于处理字符和数字之间的特殊转换。

希望这个详细的解释能帮助你完全理解 Java 中 intchar 的转换!

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