String/StringBuffer/StringBuilder对比

来源:互联网 发布:photoshop8 mac破解版 编辑:程序博客网 时间:2024/04/30 02:17

java当中的字符串涉及到三个类String、StringBuffer和StringBuilder,他们特点不同,使用的场景也不同。

一 类图

首先看看这是三个类在JDK中的类关系。
这里写图片描述

这里写图片描述

这里写图片描述

二 底层实现

String类的底层实现是static final char[ ] value,也就是说String字符串是存在一个char数据中的,static说明value是类变量,final则规定了value之不可变

StringBuffer 和 StringBuilder 的底层都是char[ ] value数组

三 线程安全性

因为String类的字符串值存在常量池不可进行修改,所以认为String类是线程安全的

StringBuffer类是线程安全的,他的方法都是synchronized关键字修饰的

StringBuilder类是线程不安全的

四 执行速度

这三个类在进行操作时的速度关系为:StringBuilder > StringBuffer > String

由于String中进行操作时都会新建一个char[ ]数组代替原来的char[ ]数组,所以速度最慢

StringBuffer线程安全,每个方法都有synchronized同步阻塞,所以操作速度受影响

StringBuilder没有同步阻塞的限制,所以操作速度最快

五 使用场景

  • 如果要操作少量的数据用 = String

  • 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

  • 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

六 常用方法

String都比较熟悉,这里只整理StirngBuffer/StringBuilder类的方法,这两个类大多数方法都是继承于AbstractStringBuilder父类

1、append(String str) 追加内容到当前StirngBuffer/StringBuilder对象的末尾,类似于字符串的连接

2、deleteCharAt(int k)删除指定位置的字符,然后将剩余的内容形成新的字符串

3、delete(int start, int end) 删除指定区间以内的所有字符,包含start,不包含end索引的区间

4、insert(int index, String str) 在StirngBuffer/StringBuilder对象指定位置中插入内容str,然后形成新的字符串

5、reverse() 将StirngBuffer/StringBuilde对象中的内容反转,然后形成新的字符串

0 0