← 返回首页
JavaSE系列教程(三十四)
发表时间:2020-01-12 13:24:45
String/StringBuilder/StringBuffer的区别。

java提供了可变字符串类,分别是StringBuilder和StringBuffer.

1.StringBuilder和StringBuffer

StringBuilder sb = new StringBuilder("hello,");
StringBuilder temp = sb;

sb.append("world");

System.out.println(sb.toString());
System.out.println(temp == sb); //true,说明改变字符串内容后,sb引用并没有指向新对象。

运行结果:
hello,world
true

从上例中,可看出StringBuilder是内容可变的字符串,改变内容不会创建新对象。StringBuffer的用法和StringBuilder完全一样。

2.StringBuilder常用方法

append() //追加新字符串

toString() //StringBuilder转字符串

reverse() //字符串反转

replace() //字符串替换

例如:

StringBuilder sb = new StringBuilder("hello,");
sb.append("java");
System.out.println(sb.toString());
sb.replace(6,sb.length(),"javascript");
System.out.println(sb);
System.out.println(sb.reverse());
运行结果:
hello,java
hello,javascript
tpircsavaj,olleh

3.String与StringBuilder/StringBuffer的区别

我们观察下String/StringBuilder/StringBuffer三者之间的继承结构图,如下:

三者的区别有以下结论:

1)String是不可变字符序列,StringBuilder和StringBuffer是可变字符序列。

2)执行速度StringBuilder > StringBuffer > String。

3)StringBuilder是非线程安全的,StringBuffer是线程安全的。

小结:

1)String是内容不可变的字符串,改变内容就是创建新对象。

2)StringBuilder和StringBuffer是可变的字符串。

3)执行速度StringBuilder > StringBuffer > String。

4)StringBuilder是非线程安全的,StringBuffer是线程安全的。