下面我给你系统地介绍一下 Java 字符串(String) 的基本知识,尽量讲得通俗易懂,如果你需要我后面也可以补充一些常见面试点或高阶用法。
✅ 1. 什么是 String?
在 Java 中,String 是用来表示字符串(文本数据)的类,属于 java.lang 包,是最常用的类之一。
String str = "Hello World"; // 这是最常见的字符串声明
✅ 2. String 的特性
| 特性 | 说明 |
|---|---|
| 不可变性 | String 一旦创建就不能修改,所有对 String 的修改其实都是新建一个字符串对象 |
| 常量池优化 | 字符串字面量会被放入字符串常量池中,节省内存 |
| final 类 | String 类被 final 修饰,不能被继承 |
| 实现了 Serializable、Comparable 接口 | 支持序列化和比较操作 |
✅ 3. String 的创建方式
1️⃣ 直接赋值(推荐)
String str1 = "abc"; // 存在常量池
2️⃣ new 关键字(不推荐,除非有特殊需求)
String str2 = new String("abc"); // 在堆中创建
⚠ 注意:用
new会在堆中创建一个新的对象,可能和常量池中的 "abc" 是两个不同的对象。
✅ 4. String 常用方法
| 方法 | 作用 |
|---|---|
length() | 返回字符串长度 |
charAt(int index) | 返回指定位置的字符 |
substring(int begin, int end) | 截取子串 |
equals(Object obj) | 比较字符串内容是否相等 |
equalsIgnoreCase(String another) | 忽略大小写比较 |
contains(CharSequence s) | 是否包含子串 |
indexOf(String str) | 返回子串首次出现的位置 |
toUpperCase() | 转大写 |
toLowerCase() | 转小写 |
trim() | 去除前后空格 |
replace(char old, char new) | 替换字符 |
split(String regex) | 分割字符串 |
✅ 5. String 不可变性举例
String a = "abc";
String b = a;
a = a + "d"; // 实际上创建了新的字符串 "abcd"
System.out.println(b); // 输出 abc
这里的 b 仍然是原来的 "abc",说明 a 被修改其实是新建了一个字符串。
✅ 6. String 内存结构(重点)
- 字符串常量池(String Pool)
- 堆内存
- 栈内存
Java 会把字符串字面量存储在常量池中,如果存在相同的字符串就直接复用,避免重复创建,提升性能。
✅ 7. 字符串比较
String a = "hello";
String b = "hello";
String c = new String("hello");
System.out.println(a == b); // true,指向常量池中的同一个对象
System.out.println(a == c); // false,c 是用 new 创建的,指向堆中的对象
System.out.println(a.equals(c)); // true,内容相同
后续还将更新:
StringBuilder和StringBuffer和String的区别- 常见面试题
- 高性能字符串操作技巧
- 底层源码原理