面试题:Java 中操作字符串都有哪些类?它们之间有什么区别 ?

Java 中操作字符串的类

在 Java 中,操作字符串的主要类有三个:

  1. String
  2. StringBuilder
  3. StringBuffer

它们都用于处理字符串,但在特性、性能和适用场景上有所不同。


1. String 类

  • 特点
    • String 是不可变的(Immutable),即一旦创建,其内容不能被修改。
    • 每次对 String 进行修改(如拼接、替换)都会生成一个新的 String 对象。
    • String 对象存储在字符串常量池中,相同的字符串内容会共享同一个对象。
  • 适用场景
    • 字符串内容不需要频繁修改的场景。
    • 多线程环境下,由于不可变性,String 是线程安全的。
  • 示例
    String str = "Hello";
    str = str + " World"; // 创建了一个新的 String 对象

2. StringBuilder 类

  • 特点
    • StringBuilder 是可变的(Mutable),可以直接修改其内容,而不会创建新对象。
    • 非线程安全,不适合在多线程环境下使用。
    • 性能优于 String,特别是在频繁修改字符串的场景。
  • 适用场景
    • 单线程环境下,需要频繁修改字符串的场景。
    • 高性能要求的字符串操作。
  • 示例
    StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World"); // 直接修改原对象
    System.out.println(sb.toString()); // 输出 "Hello World"

3. StringBuffer 类

  • 特点
    • StringBuffer 也是可变的(Mutable),可以直接修改其内容。
    • 线程安全,所有方法都使用 synchronized 关键字修饰,适合在多线程环境下使用。
    • 性能略低于 StringBuilder,因为同步操作会带来额外的开销。
  • 适用场景
    • 多线程环境下,需要频繁修改字符串的场景。
  • 示例
    StringBuffer sb = new StringBuffer("Hello");
    sb.append(" World"); // 直接修改原对象
    System.out.println(sb.toString()); // 输出 "Hello World"

三者的区别

特性StringStringBuilderStringBuffer
可变性不可变可变可变
线程安全线程安全(不可变性)非线程安全线程安全
性能低(频繁修改时)中(因同步开销)
适用场景字符串内容不频繁修改单线程下频繁修改字符串多线程下频繁修改字符串

总结

  • String:不可变,适合字符串内容不频繁修改的场景,线程安全。
  • StringBuilder:可变,性能高,适合单线程下频繁修改字符串的场景。
  • StringBuffer:可变,线程安全,适合多线程下频繁修改字符串的场景。
THE END
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容