String,StringBuilder,StringBuffer对比

  1. 云栖社区>
  2. 博客>
  3. 正文

String,StringBuilder,StringBuffer对比

艾贺 2018-03-20 16:40:00 浏览534
展开阅读全文

简述

StringBuilder 对比 StringBuffer

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

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

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

剖析

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


    img_d9d09cfe95e22793cee488b990890554.png
    StringBulder继承AbstractStringBuilder

    img_cffc8ce455dc28a6dee3216fde4a08e0.png
    StringBuffer继承AbstractStringBuilder
  2. StringBuidler与StringBuffer的调用方式都一致,只不过StringBuffer加了synchronized.

img_86f88bb9ab0a39021dbceb13b1f0118f.png
StringBuilder方法
img_ec88a783d331bb2b6c887f5dcb115033.png
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

最后

面试高频问题。

网友评论

登录后评论
0/500
评论
艾贺
+ 关注