java中char类型是16位无符号整数,存储unicode bmp平面码点(0–65535),如'a'为65、'中'为20013;超bmp字符需代理对表示,不能单个char存储。

Java 中的 char 类型使用 Unicode 编码(具体是 UTF-16 的基本多文种平面 BMP 部分)来存储字符,占用 2 个字节(16 位),取值范围是 0 到 65535(即 \u0000 到 \uffff)。
char 存储的是 Unicode 码点,不是字节
不同于 C/C++ 中 char 表示单字节,Java 的 char 本质是无符号的 16 位整数,直接对应一个 Unicode 码点(code point)。例如:
- 'A' 存储的是十进制 65(即 \u0041)
- '中' 存储的是十进制 20013(即 \u4e2d)
- '\u03B1'(希腊字母 α)存储的是 945
只能表示 BMP 平面的字符(基础补充)
Unicode 标准中,BMP(U+0000 ~ U+FFFF)占 16 位,刚好能用一个 char 表示。但超出此范围的字符(如某些 emoji、古文字、扩展汉字),属于辅助平面(Supplementary Planes,U+10000 及以上),需要 两个 char 组成代理对(surrogate pair) 才能表示。例如:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- ''(U+1F600)不能用单个 char 存,需拆为高代理(\uD83D)和低代理(\uDE00)
- 直接写 char c = ''; 会编译错误
- 正确方式:用 String 或 int(配合
Character.toChars())处理
char 在内存中就是 16 位二进制值
声明 char c = 'x'; 后,JVM 在栈或字段中分配连续 2 字节空间,存入该字符对应的 Unicode 数值(小端或大端取决于 JVM 实现,但对 Java 程序员透明)。你可以把它当作“能打印的无符号 short”来理解:
- char c = 65; 等价于 char c = 'A';
- System.out.println((int)c); 输出 65
- 支持算术运算:char d = (char)(c + 1); // 得到 'B'
注意与 String、byte 的区别
不要混淆 char 和其他类型:
- String 是字符序列(内部用 char[] 或 byte[] 存储,Java 9+ 默认紧凑字符串优化)
- byte 是有符号 8 位整数,不能直接存中文等非 ASCII 字符(会丢失信息)
- 从 byte 转 char 必须指定编码(如
new String(bytes, "UTF-8")),否则可能乱码
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










