String StringBuilder StringBuffer 简略分析

之前在做题的时候,遇到了字符串拼接相关问题。当时用String,内存消耗和事件消耗都很大,StringBuilder就没有这种问题,于是查了一些资料,做个小总结。

String

String内部记录值的变量用final修饰,值不可以被直接改变,在拼接的时候每次都要创建新的字符串,耗费一定的时间和空间。在进行大量字符串操作的时候会很难受。

在这里插入图片描述

StringBuffer 和 StringBuilder

当对字符串进行修改的时候,推荐使用 StringBuffer 和 StringBuilder 类。

这两个类都继承了AbstractStringBuilder,也都实现了Serializable和CharSequence接口

其中记录值的变量没有final修饰。

在这里插入图片描述
这样一来,就可以直接实现字符串的拼接,节省时间和空间

  • 拼接通过append方法实现,底层进行数组的扩容、追尾增加时使用native方法arraycopy。扩容默认为原数值*2+2。

  • StringBuilder是JKD1.5的新类,其性能比StringBuffer要好。

  • StrringBuilder是线程不安全的,StringBuffer是线程安全的。

StringBuffer中大部分有synchronized修饰

在这里插入图片描述 所以综合来看StringBuffer更全面一些,但是如果在日常普通开发或者像我做题的时候,用StringBuilder是最好的。