面向LeetCode笔记——String

75 阅读2分钟

下面我给你系统地介绍一下 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,内容相同

后续还将更新:

  • StringBuilderStringBufferString 的区别
  • 常见面试题
  • 高性能字符串操作技巧
  • 底层源码原理