Java字符串详解

0 阅读3分钟

这是一个 Java 快速入门项目,非常适合用来练手。相关源码已上传至 GitHub,👉 点击查看 GitHub 仓库。欢迎交流指正、提交 issue。

一、基本概念

Java 中的字符串由 java.lang.String 类表示,是不可变(immutable)对象。这意味着一旦创建,其内容就无法修改。任何看似"修改"的操作(如拼接、截取)都会创建新的 String 对象。

二、不可变性的意义

字符串的不可变性带来了以下核心优势:

  1. 字符串常量池的基础 — 允许多个引用安全地共享同一对象
  2. 线程安全 — 天然支持多线程并发访问
  3. 安全性 — 关键信息(如数据库连接字符串)不会被意外篡改
  4. hashCode 缓存 — 只需计算一次,提升哈希表等数据结构的性能

三、字符串的创建

Java 提供了两种主要的字符串创建方式:

1. 字面量方式(推荐)

String s1 = "Hello";  // 使用字符串常量池

2. 构造方法方式

String s2 = new String("Hello");  // 在堆中创建新对象

注意:字面量方式会优先使用字符串常量池,而 new String() 每次都会创建新对象。

四、常用 API

以下是 String 类最常用的方法:

方法说明示例
length()获取字符串长度"Hello".length()5
charAt(int)获取指定索引字符"Hello".charAt(1)'e'
substring(int, int)截取子串"Hello".substring(1, 4)"ell"
equals(Object)比较内容是否相等"Hi".equals("Hi")true
indexOf(String)查找子串首次出现位置"Hello".indexOf("ll")2
trim()去除首尾空白字符" Hi ".trim()"Hi"
toUpperCase()转换为大写"hello".toUpperCase()"HELLO"
split(String)按规则分割字符串"a,b,c".split(",")["a","b","c"]

完整示例代码

以下是表格中所有方法的完整示例代码:

public class StringApiExamples {
    public static void main(String[] args) {
        // 1. length() 方法示例
        String str1 = "Hello";
        int len = str1.length();
        System.out.println("字符串长度: " + len); // 输出: 5
        
        // 2. charAt(int) 方法示例
        String str2 = "Hello";
        char ch = str2.charAt(1);
        System.out.println("索引1的字符: " + ch); // 输出: e
        
        // 3. substring(int, int) 方法示例
        String str3 = "Hello World";
        String sub = str3.substring(6, 11);
        System.out.println("子串: " + sub); // 输出: World
        
        // 4. equals(Object) 方法示例
        String str4 = "Hello";
        String str5 = "Hello";
        boolean isEqual = str4.equals(str5);
        System.out.println("是否相等: " + isEqual); // 输出: true
        
        // 5. indexOf(String) 方法示例
        String str6 = "Hello World";
        int index = str6.indexOf("World");
        System.out.println("子串位置: " + index); // 输出: 6
        
        // 6. trim() 方法示例
        String str7 = "  Hello World  ";
        String trimmed = str7.trim();
        System.out.println("去除空白后: '" + trimmed + "'"); // 输出: 'Hello World'
        
        // 7. toUpperCase() 方法示例
        String str8 = "hello world";
        String upper = str8.toUpperCase();
        System.out.println("大写: " + upper); // 输出: HELLO WORLD
        
        // 8. split(String) 方法示例
        String str9 = "apple,banana,orange";
        String[] fruits = str9.split(",");
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
        // 输出: apple
        //       banana
        //       orange
    }
}

性能优化建议

字符串拼接:频繁拼接时,使用 StringBuilder(非线程安全)或 StringBuffer(线程安全),避免产生大量中间 String 对象。

// 不推荐:产生多个中间对象
String result = "";
for (int i = 0; i < 100; i++) {
    result += i;  // 每次循环创建新 String
}

// 推荐:使用 StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
    sb.append(i);
}
String result = sb.toString();