Java中char是16位Unicode码点整数,固定占2字节,兼容ASCII前128码点,支持五种赋值方式,参与运算时自动提升为int,超出基本平面字符需代理对表示。

Java 中的 char 类型不是“字符图形”,而是 Unicode 码点的 16 位整数表示,它天然兼容 ASCII(前 128 个码点完全一致),但存储空间固定为 2 字节,远大于 ASCII 的 1 字节。理解这一点,才能避免在字符处理、类型转换和编码边界场景中出错。
char 存储空间:固定 2 字节,不是“看字符定大小”
无论你存的是 'A' 还是 '中' 或 '€',char 在内存里永远占 2 个字节(16 位)。它不按字符“看起来多复杂”分配空间,而是统一用一个 0–65535 的整数来记录其 Unicode 码点值。
- 'A' → Unicode U+0041 → 十进制 65 → 占 2 字节(高位补 0)
- '中' → Unicode U+4E2D → 十进制 20013 → 同样占 2 字节
- ASCII 字符(如 '0'、'z'、'\n')只是这个范围的子集,没有特殊存储优化
- 注意:超出基本平面(U+FFFF)的字符(如某些 emoji ?、古汉字)无法用单个
char表示,必须用代理对(两个char组合)
ASCII 码对照:前 128 个 Unicode 码点就是 ASCII
Unicode 设计时把 ASCII 完全纳入自身前段——U+0000 到 U+007F(即十进制 0–127)与 ASCII 一一对应。这意味着所有标准英文字符、数字、标点和控制符,在 Java 中用 char 表示时,数值和 ASCII 定义完全相同。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- '0' → 48,'9' → 57
- 'A' → 65,'Z' → 90
- 'a' → 97,'z' → 122
- 空格 → 32,'!' → 33,'@' → 64,'\n' → 10,'\t' → 9
- 可直接用整数赋值:
char c = 65;等价于char c = 'A';
实战赋值方式:五种写法,本质都是数字
char 是整数类型,所有赋值最终都转为一个 0–65535 的整数。编译器根据上下文自动解析成对应字符显示,但底层无差别。
立即学习“Java免费学习笔记(深入)”;
- 字符字面量:
char c = 'X';→ 编译器查 Unicode 表得 88 - 十进制整数:
char c = 88;→ 直接存 88,打印仍是 'X' - 十六进制:
char c = 0x58;→ 同上,更贴近底层表示 - 八进制(少用):
char c = 0130;(即 88 的八进制) - Unicode 转义:
char c = '\u0058';→ 明确按码点解析,适合非 ASCII 字符如'\u4F60'(你)
常见陷阱:运算与类型提升要小心
当 char 参与算术运算或与其他类型混合时,Java 会按规则自动提升,容易误以为还是“字符”。
-
char c = '0'; int i = c + 1;→ 结果是 49('0' 的 ASCII 值)+ 1 = 50,不是字符 '1' -
System.out.println('0' + 1);输出 49,因为char在加法中先升为int - 拼接字符串时:
"Value: " + 'A'→ 自动转为字符串 "A",不会出错 - 强制转回字符需谨慎:
char d = (char)('A' + 3);→ 得到 'D',但若结果超 65535 会截断

















