基本介绍
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
使用示例:
| |
方法:http://www.runoob.com/java/java-stringbuffer.html
深入理解
Java 提供的三种操作字符串对象的方法:String、StringBuffer、StringBuilder。它们的相同点都是用来封装字符串,都实现了 CharSequence 接口。区别如下:
关于可变性:
String是一个不可变类,创建之后直到销毁,这个对象都是不可被改变的;StringBuffer、StringBuilder都继承自AbstractStringBuilder,它的底层使用字符数组保存字符串,是一个可变类。
关于初始化方法:
String类可以使用直接赋值的方法进行初始化:String s = "Hello";;StringBuffer、StringBuilder只能使用new的这种构造方法赋值。
关于修改一个字符串,以字符串追加为例:
String可以直接使用累加的方法:1String str = "Hello,"; str += "World";这种方法看起来很方便,实际上底层是销毁了原来的对象后创建了一个新的对象;
StringBuffer、StringBuilder等价于使用下面的代码:1StringBuffer sb = new StringBuffer("Hello,"); sb.append("World");因为前者的底层会进行一些额外的操作,所以即使将
sb重新复制给 String,效率也更高。
关于一些原生的方法:
String实现了equals()方法与hashCode()方法;StringBuffer、StringBuilder并没有实现这两个方法,也就是说:1 2 3StringBuffer sb1 = new StringBuffer("Java"); StringBuffer sb2 = new StringBuffer("Java"); sb1.equals(sb2); // ==> false
关于是否线程安全:
StringBuffer、StringBuilder它们都提供了一系列插入追加改变字符串序列的方法,它们的用法基本相同。区别在于StringBuffer是线程安全的,而StringBuilder是线程不安全的。