String,StringBuilder,StringBuffer对比

简述

StringBuilder 对比 StringBuffer

  • StringBuilder是非线程安全
  • StringBuffer是线程安全的。

StringBuilder和StringBuffer其余的特性都是一样的,他们与String的区别:

  • StringBuilder与StringBuffer的对象存储在堆中,String对象存储在Constant String Pool(字符串常量池)
  • 它们两个是可变对象。String一旦创建无法修改,并且String是线程安全的。
    参考: 为什么字符串类是Final的?

剖析

  1. 点进去JDK的源码,一眼就看出StringBuilder与StringBuffer差别。


    String,StringBuilder,StringBuffer对比
    StringBulder继承AbstractStringBuilder

    String,StringBuilder,StringBuffer对比
    StringBuffer继承AbstractStringBuilder
  2. StringBuidler与StringBuffer的调用方式都一致,只不过StringBuffer加了synchronized.

String,StringBuilder,StringBuffer对比
StringBuilder方法
String,StringBuilder,StringBuffer对比
StringBuffer方法
  1. 看到这我们就明白StringBuilder与StringBuffer的关系了。本质上它们都是改变char数组中内容,来构建字符串,它们对外公开了修改char数组的方法,而String未公开。

几个有用的方法

  • System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
  • StringBuilder的reverse方法,实现字符串反转

面试题

  1. string、stringbuilder、stringbuffer区别
  2. String类为什么是final的
  3. 说说String的常用方法
charAt
trim
length
format
substring
contains
join
equals
isEmpty
concat
replace
equalsignoreCase
split
toLowerCase
toUpperCase
valueOf

最后

面试高频问题。