Java 面试之String、StringBuffer、StringBuilder
Java经典面试题
April 27, 2024
0 words
0 read

请你说一下 String、StringBuffer、StringBuilder 有什么不同?

💡

几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关工具如拼接类的使用,对写出高质量代码是非常有帮助的。面试官可能会通过上面的问题延伸出线程安全的设计、JVM 对象缓存机制的理解等等

String 详解

  1. String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。

  2. 因为 String 被定义成了 final 修饰,那么它天生保证了线程的安全,因为我们无法对其内部的数据进行修改。

  3. 在将来的 Java9中 String 的定义发生了巨大的改变,由原来的 char[]数组改变成了 byte[]数组并且加上一个标识编码 coder

  4. String 的 intern()方法:Java6之后新增的 intern()方法是提示 JVM 将字符串进行缓存,以备将来再次使用。当我们在创建字符串并且调用 intern()方法的时候,如果字符串已经被缓存了,那么就返回缓存里的实例,否则会将其缓存起来。

StringBuffer 详解

StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer 本质是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的需要,不然还是推荐使用它的后继者,也就是 StringBuilder。

StringBuilder 详解

StringBuilder 是 Java 1.5 中新增的,在能力上和 StringBuffer 没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选。

More Articles
See All