1. char:基本数据类型
- 本质:
char是 Java 中的基本数据类型(Primitive Type),表示一个 16 位无符号 Unicode 字符。它占用 2 个字节(16 位)内存空间。 - 值范围:最小值为
\u0000(即 0),最大值为\uffff(即 65,535)。可以表示世界上大多数字符。 - 特点:
- 是基本类型,不是对象,没有方法。
- 字面值用单引号
'表示,例如:char grade = 'A'; - 可以直接参与算术运算(提升为
int)。 - 存储在栈内存(如果作为局部变量)或对象内部。
- 用途:主要用于表示单个字符。
2. String:不可变的字符序列
- 本质:
String是一个 类(Class),用于表示不可变的字符序列。它内部封装了一个char[]数组来存储字符。 - 核心特性 - 不可变性 (Immutability):
- 一旦
String对象被创建,其包含的字符序列 就不能被更改。任何看似修改String的操作(如concat,substring,toUpperCase,replace等),实际上都是 创建并返回一个全新的String对象。 - 优点:
- 线程安全:由于不可变,多个线程可以安全地共享同一个
String对象,无需同步。 - 安全性:常用于敏感信息(如密码)的传递,因为不可变,避免了内容被意外修改的风险。
- HashCode 稳定性:
String的hashCode()值在对象创建时计算一次并缓存,后续调用直接返回缓存值,效率高且稳定,非常适合作为哈希表的键(如HashMap)。
- 线程安全:由于不可变,多个线程可以安全地共享同一个
- 缺点:
- 频繁修改效率低:每次'修改'都会产生新的对象,如果在一个循环中反复拼接字符串,会产生大量中间临时对象,增加 GC 压力。
- 一旦
- 创建方式:
- 字面量:
String s = "abc";(优先使用常量池) - 构造函数:
String s = new String("abc");(在堆上新建对象) - 字符数组:
char[] data = {'a', 'b', 'c'}; String str = new String(data); +运算符拼接(底层可能编译优化为StringBuilder)。
- 字面量:
- 常用方法:
length(),charAt(int index),concat(String str),equals(Object anObject),indexOf(String str),substring(int beginIndex), , , , 等。

