java 中的 char 类型是16位无符号整数(0–65535),直接对应unicode基本多文种平面(bmp)码点,兼容ascii且支持常见多语言字符,但无法单独表示超出bmp的字符。

Java 中的 char 类型本质上是一个 16 位无符号整数(0 到 65535),它直接对应 Unicode 字符集中的码点(code point)。它不是“字符图形”,而是该字符在 Unicode 表里的编号。
char 完全兼容 ASCII
Unicode 的前 128 个码点(U+0000 到 U+007F)与 ASCII 编码完全一致。这意味着:
- 数值 65 的
char就是'A',和 ASCII 定义相同 - 数值 97 对应
'a',48 对应'0',10 是换行符'\n' - 所有标准 ASCII 字符(0–127)都能用
char精确表示,且无需转换
char 表示的是 Unicode 码点,不只是 ASCII
Java 的 char 占 2 个字节(16 位),可表示 0 到 65535(即 U+0000 到 U+FFFF)范围内的 Unicode 基本多文种平面(BMP)字符。例如:
-
'中'的 Unicode 码点是 U+4E2D,十进制为 20013,可直接写成char c = 20013;或char c = '\u4E2D'; -
'€'(欧元符号)是 U+20AC(8364),同样支持 - 常见标点、希腊字母、俄文字母、日文平假名等绝大多数常用字符都在这个范围内
赋值方式体现编码本质
char 可通过多种等价形式初始化,背后都是 Unicode 数值:
- 字符字面量:
char c = 'X';→ 编译器自动转为其 Unicode 值('X' = 88) - 十进制整数:
char c = 88;→ 直接存入数值,输出仍为'X' - 十六进制:
char c = 0x58;(88 的十六进制) - Unicode 转义:
char c = '\u0058';→ 明确按 Unicode 码点解析
注意:char ≠ UTF-16 全覆盖
虽然 char 基于 UTF-16 编码设计,但它本身只占 16 位,无法单独表示 Unicode 中超出 BMP 的字符(如部分 emoji、古汉字、罕见符号),这些需用两个 char(代理对,surrogate pair)组合表达。单个 char 变量最多承载 U+0000–U+FFFF 范围内的字符。











