
在 Java 编程中,char、String、StringBuilder 和 StringBuffer 是处理文本的四大基石。理解它们的设计哲学、底层实现和性能差异,对于编写高效、健壮的代码至关重要。
一、基础:char 原始类型
在深入复杂的字符串类之前,我们先看看构成字符串的最小单元——char。
1. 定义与本质
char 是 Java 的原始数据类型(Primitive Type),用于表示一个单一的 16 位 Unicode 字符。Java 从诞生之初就采用了 Unicode 字符集,这赋予了它良好的国际化支持。
- 大小:16 位(2 个字节),范围从
0到65,535(\u0000到\uffff)。 - 无符号性:
char是无符号类型,不能表示负数。
2. 编码演变:从 char 到 byte
在 JDK 9 之前,String 内部使用 char[] 存储。但开发者很快发现,大多数应用主要使用 Latin-1 字符集(如英文、数字),仅需 1 个字节。用 2 字节的 char 存储会造成一半内存浪费。
因此,JDK 9 起,String(以及 StringBuilder 和 StringBuffer)底层改用 byte[] 数组,并引入 coder 字段标识编码方式(LATIN1 或 UTF16)。这对开发者透明,逻辑上我们依然视其为字符序列。
3. 初始化与赋值
char 的赋值很灵活,主要有以下几种方式:
转义字符:表示特殊功能字符。
char c7 = '\n'; // 换行符
char c8 = '\''; // 单引号本身
char c9 = '\\'; // 反斜杠本身
Unicode 转义序列:使用 \u 加 4 位十六进制数。


