char 是 Java 中唯一的无符号 16 位整数类型,固定占 2 字节,取值范围 0–65535,声明需用单引号,底层为整数可参与运算,但无法单独表示超出 BMP 的 emoji 等字符。

char 是 Java 中唯一的无符号 16 位整数类型,专门用于表示单个 Unicode 字符,它在内存中**固定占用 2 个字节(16 位)**,取值范围是 0 到 65535(即 Unicode 编码的 U+0000 到 U+FFFF)。
如何声明和初始化 char 变量
声明 char 变量必须使用单引号包裹单个字符,不能用双引号(那是 String),也不能为空或多个字符:
- ✅ 正确写法:char c = 'A';、char digit = '5';、char emoji = '\u2603';(雪人符号,Unicode 码点)
- ❌ 错误写法:char c = "A";(双引号 → 编译错误)、char c = '';(空字符 → 语法错误)、char c = 'ab';(两个字符 → 编译错误)
理解 char 的 2 字节本质与数值含义
char 表面是字符,底层是 0–65535 的整数。Java 允许把它当数字参与运算(自动类型提升为 int),也能用十六进制或 Unicode 转义初始化:
- char a = 97; → 等价于 'a'(因为 'a' 的 Unicode 值是 97)
- char hex = '\u0041'; → 等价于 'A'(U+0041 是大写 A 的 Unicode 编码)
- char c = 'Z' + 1; → 合法,结果是 '['(ASCII/Unicode 中 'Z' 是 90,+1 得 91,对应 '[')
常见误区与注意事项
不要混淆 char 和 String,也不要误以为 char 能存 emoji 或生僻汉字(超出 BMP 平面的字符如 ? 需要两个 char 组成代理对):
立即学习“Java免费学习笔记(深入)”;
- char 只能表示一个 UTF-16 代码单元,不是“一个图形字符”;像 ?(U+1F30D)在 Java 中需用 String 或 int(codePoint)处理
- char 类型没有负值,但若强制转为 byte 或 short,高位截断可能导致负数(例如 (byte)'\u00FF' 得 -1)
- 数组中每个 char 元素独立占 2 字节:char[] arr = new char[10]; → 占用 20 字节(不计对象头)
验证内存占用的小技巧
虽然 Java 不直接暴露单变量内存大小,但可通过 ObjectLayout 工具或数组估算:
- 创建 1000 个 char 的数组:char[] a = new char[1000];
- 其元素总内存 ≈ 1000 × 2 = 2000 字节(忽略数组对象头和对齐填充)
- 对比 int[1000] 占约 4000 字节 → 证实 char 是 int 占用的一半,印证 2 字节特性


















