1. 字符串基础在 Java 中字符串是使用最频繁的数据类型之一。Java 提供了两种创建字符串的方式字面量方式String str1 Hello;new 关键字方式String str2 new String(Hello);这两种方式在内存分配上有重要区别字面量方式会检查字符串常量池如果已存在相同字符串则直接引用new 关键字方式则会在堆内存中创建新的对象。2. 字符串不可变性Java 中的字符串是不可变的immutable这意味着一旦创建就不能修改。所有看似修改字符串的操作如拼接、替换实际上都会创建新的字符串对象。String s1 Hello; String s2 s1.concat( World); // 创建新对象 System.out.println(s1); // 输出: Hello System.out.println(s2); // 输出: Hello World不可变性带来的好处包括线程安全、缓存哈希值和字符串常量池优化。3. 常用字符串操作方法3.1 获取字符串信息length()获取字符串长度charAt(int index)获取指定位置的字符indexOf(String str)查找子串首次出现的位置lastIndexOf(String str)查找子串最后一次出现的位置3.2 字符串比较equals(Object obj)比较字符串内容是否相等equalsIgnoreCase(String str)忽略大小写比较compareTo(String str)按字典顺序比较3.3 字符串操作substring(int beginIndex, int endIndex)截取子串replace(char oldChar, char newChar)替换字符toUpperCase()/toLowerCase()大小写转换trim()去除首尾空白字符split(String regex)按正则表达式分割字符串4. 字符串拼接性能优化在 Java 中字符串拼接有多种方式性能差异显著// 1. 使用 运算符编译时优化为 StringBuilder String result1 Hello World; // 2. 使用 concat() 方法 String result2 Hello.concat( World); // 3. 使用 StringBuilder单线程推荐 StringBuilder sb new StringBuilder(); sb.append(Hello); sb.append( ); sb.append(World); String result3 sb.toString(); // 4. 使用 StringBuffer线程安全 StringBuffer sbf new StringBuffer(); sbf.append(Hello); sbf.append( ); sbf.append(World); String result4 sbf.toString();在循环中拼接字符串时应避免使用 运算符推荐使用 StringBuilder。5. 字符串常量池与 intern() 方法字符串常量池是 JVM 中的特殊内存区域用于存储字符串字面量。使用intern()方法可以将字符串对象添加到常量池或返回常量池中的引用String s1 new String(Hello); String s2 s1.intern(); String s3 Hello; System.out.println(s1 s2); // false System.out.println(s2 s3); // true6. 正则表达式与字符串Java 提供了强大的正则表达式支持常用于字符串验证、搜索和替换// 验证邮箱格式 String email testexample.com; boolean isValid email.matches(^[\\w.-][\\w.-]\\.[a-zA-Z]{2,}$); // 提取数字 String text 价格¥128.50折扣20%; Pattern pattern Pattern.compile(\\d\\.?\\d*); Matcher matcher pattern.matcher(text); while (matcher.find()) { System.out.println(找到数字: matcher.group()); }7. 字符串格式化Java 提供了多种字符串格式化方式// 1. String.format() String formatted String.format(姓名%s年龄%d分数%.2f, 张三, 25, 95.5); // 2. System.out.printf() System.out.printf(当前时间%tF %tT%n, new Date(), new Date()); // 3. MessageFormat适合国际化 String pattern 今天是{0,date,full}温度{1,number}度; String result MessageFormat.format(pattern, new Date(), 28);8. 性能最佳实践避免在循环中使用 拼接字符串使用 StringBuilder 处理大量字符串操作合理使用字符串常量池注意字符串编码问题使用合适的字符串比较方法9. 常见面试题9.1 String、StringBuilder 和 StringBuffer 的区别String 是不可变的线程安全StringBuilder 是可变的非线程安全性能最好StringBuffer 是可变的线程安全性能稍差。9.2 和 equals() 的区别 比较对象引用是否指向同一内存地址equals() 比较字符串内容是否相等。9.3 如何实现字符串反转// 方法1使用 StringBuilder String reversed1 new StringBuilder(Hello).reverse().toString(); // 方法2使用字符数组 char[] chars Hello.toCharArray(); for (int i 0, j chars.length - 1; i j; i, j--) { char temp chars[i]; chars[i] chars[j]; chars[j] temp; } String reversed2 new String(chars);