杰瑞科技汇

Java中int如何转char?

基本方法:强制类型转换

这是最直接、最常用的方法,Java 中,char 类型是 16 位的无符号 Unicode 字符,可以存储一个 Unicode 字符。int 类型是 32 位的有符号整数,你可以将一个 int 值强制转换为 char

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

语法:

char c = (char) intValue;

关键点:

  • (char) 是强制类型转换操作符。
  • 这个转换会将 int 值的低 16 位复制给 char 变量,高 16 位会被丢弃。
  • int 值在 char 的有效范围内(0 到 65535),转换是成功的。
  • int 值超出了 char 的范围(负数或大于 65535 的正数),转换后的 char 值将是不可预测的,因为它只取了低 16 位。

注意事项

a. ASCII 字符

int 值在 0 到 127 之间时,它对应标准的 ASCII 字符,这是最常见的转换场景之一。

int asciiCode = 65;
char charA = (char) asciiCode;
System.out.println(charA); // 输出: A
int asciiCode2 = 97;
char chara = (char) asciiCode2;
System.out.println(chara); // 输出: a

b. Unicode 字符

char 本质上就是一个 Unicode 字符,任何在 0 到 65535 范围内的 int 值都可以被转换为一个 char

Java中int如何转char?-图2
(图片来源网络,侵删)
// 汉字 '好' 的 Unicode 码是 22909
int unicodeValue = 22909;
char chineseChar = (char) unicodeValue;
System.out.println(chineseChar); // 输出: 好
// 表情符号 '😊' 的 Unicode 码是 128522
int emojiValue = 128522;
char emojiChar = (char) emojiValue;
System.out.println(emojiChar); // 输出: 😊

c. 超出范围的 int

int 值是负数或者大于 65535,转换会截断高 16 位,结果可能不是你想要的。

// int 值超出了 char 的范围 (0-65535)
int largeValue = 70000; // 二进制: 00000000 00000001 00010001 01011000
char c = (char) largeValue; // 只保留低16位: 00010001 01011000, 即 5656
System.out.println((int) c); // 输出: 5656
System.out.println(c);       // 输出一个可能无法识别的字符
// int 值为负数
int negativeValue = -1; // 二进制 (补码): 11111111 11111111 11111111 11111111
char c2 = (char) negativeValue; // 只保留低16位: 11111111 11111111, 即 65535
System.out.println((int) c2); // 输出: 65535
System.out.println(c2);       // 输出: ￿ (一个特殊的控制字符)

完整示例代码

下面是一个综合示例,展示了各种情况下的 intchar 的转换。

public class IntToCharExample {
    public static void main(String[] args) {
        // 1. 转换为 ASCII 字符
        int asciiA = 65;
        char charFromAscii = (char) asciiA;
        System.out.println("ASCII 65 -> char: " + charFromAscii); // A
        // 2. 转换为数字字符
        int digitInt = 9;
        char charFromDigit = (char) digitInt;
        System.out.println("数字 9 -> char: " + charFromDigit); // 9 (注意:不是字符'9')
        // 如何得到字符 '9'?
        // '0' 的 ASCII 码是 48,48 + 9 = 57
        char charNine = (char) (48 + 9);
        System.out.println("通过计算得到字符 '9': " + charNine); // 9
        // 3. 转换为 Unicode 字符 (汉字)
        int unicodeGood = 22909;
        char charFromUnicode = (char) unicodeGood;
        System.out.println("Unicode 22909 -> char: " + charFromUnicode); // 好
        // 4. 处理超出范围的 int 值
        int outOfRangeInt = 70000;
        char charFromOutOfRange = (char) outOfRangeInt;
        System.out.println("超出范围的 int 70000 -> char: " + charFromOutOfRange);
        System.out.println("该 char 的 int 值: " + (int) charFromOutOfRange); // 5656
        // 5. 处理负数 int 值
        int negativeInt = -1;
        char charFromNegative = (char) negativeInt;
        System.out.println("负数 int -1 -> char: " + charFromNegative);
        System.out.println("该 char 的 int 值: " + (int) charFromNegative); // 65535
    }
}

相关场景与技巧

将数字 0-9 转换为字符 '0'-'9'

这是一个非常常见的面试题,直接转换 (char) 9 得到的是换行符 \t 的 ASCII 码 9,而不是字符 '9'

正确方法:利用字符 '0' 的 ASCII 码

Java中int如何转char?-图3
(图片来源网络,侵删)
int number = 5;
// '0' 的 ASCII 码是 48,48 + 5 = 53,即 '5' 的 ASCII 码
char digitChar = (char) (number + '0'); // 或者 (char) (number + 48)
System.out.println(digitChar); // 输出: 5

char 转换回 int

如果你有一个 char,想得到它对应的 ASCII 码或 Unicode 码,只需要将其强制转换为 int 即可。

char myChar = 'A';
int myInt = (int) myChar; // 或者直接 int myInt = myChar;
System.out.println("字符 'A' 的 int 值是: " + myInt); // 输出: 65

转换目标 方法 示例 说明
int -> char (基本) 强制类型转换 char c = (char) 65; 直接转换,取 int 的低 16 位。
int -> char (数字转字符) 加上 '0' 的码值 char c = (char) (5 + '0'); 将数字 0-9 转换为对应的字符 '0'-'9'
char -> int 强制类型转换或直接赋值 int i = (int) 'A';int i = 'A'; 获取字符的 ASCII 或 Unicode 码值。

核心要点:

  • 使用 (char) 进行强制转换。
  • 理解 char 是 16 位无符号整数,范围是 0 到 65535。
  • 注意处理超出范围的 int 值和将数字转换为数字字符的特殊情况。
分享:
扫描分享到社交APP
上一篇
下一篇