java提供了可变字符串类,分别是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完全一样。
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
我们观察下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是线程安全的。