Java字符串详解

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

一、基本概念

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

二、不可变性的意义

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

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

三、字符串的创建

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

1. 字面量方式(推荐)

java 复制代码
String s1 = "Hello";  // 使用字符串常量池

2. 构造方法方式

java 复制代码
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"]

完整示例代码

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

java 复制代码
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 对象。

java 复制代码
// 不推荐:产生多个中间对象
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();
相关推荐
无我Code2 小时前
开发者-2026年中总结
前端·面试·程序员
小虎AI生活3 小时前
从写代码到被出版社认作"科普推广人":一场新书发布会给我的触动
ai编程
EntyIU3 小时前
NFS离线部署
java
浮生望3 小时前
React 受控与非受控组件:从表单状态管理到实时校验的完整实践
前端
糖墨夕4 小时前
第二章:AI Agent 到底是个啥?—— 用生活场景把概念讲明白
前端
Csvn4 小时前
⚡ content-visibility: auto —— 长页面渲染提速的隐藏神器,白捡的性能优化
前端
用户938515635074 小时前
深入理解 Next.js:从 SPA 的 SEO 问题到约定式路由与 SSR 原理
前端·后端·全栈
snow@li5 小时前
web:前端500知识点/速查手册
前端
Goboy5 小时前
那份让我加班3天的竞品调研报告,我用 TRAE Work 4小时搞定了
ai编程·trae