Java中java.lang.StringBuilder类与与String类的功能类似,它们有什么区别呢?
String 对象是不可改变的,每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间,如果是需要对字符串执行重复修改,就要不断的创建新的 String 对象。如果要修改字符串而不创建新的对象,则可以使用StringBuilder 类。如:在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
一个String对象的长度是固定 的,不能更改其内容。当你用“+”连接两个字符串从而创建新的字符串时,你其实创建了一个新的String对象。如果频繁的这样子操作,就会产生大量的垃圾并且效率低。
这种情况下可以考虑使用StringBuilder。
/*
* @author junife
* @date 2013-02-19
* @fuction StringBuilder 用法
*/
public class StringBuilderTest
{
public static void main(String[] args)
{
String text = "testContent";
long beginTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++)
{
text = text + i;
}
long endTime = System.currentTimeMillis();
System.out.println("使用String操作符(+)的执行时间:" + (endTime - beginTime));
StringBuilder stringBuilder = new StringBuilder();
beginTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++)
{
stringBuilder.append(i);
}
endTime = System.currentTimeMillis();
System.out.println("使用StringBuilder的执行时间:" + (endTime - beginTime));
}
}
/*
* 执行结果:
* 使用String操作符(+)的执行时间:301
* 使用 StringBuilder 的执行时间:1
*/
输出的执行时间肯定是第一次大,i值越大差距越大。
通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder 类的实例,如:
StringBuilder mystr = new StringBuilder("Welcome!");
StringBuilder 的属性
Capacity:当前为实例分配的字符数量。默认容量是16.
Length: 对象内的字符串长度的值
StringBuilder的方法
Append:方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。
Insert:方法将字符串或对象添加到当前 StringBuilder 中的指定位置。如:bildertxt.insert(2,"insert");
replace(int start, int end, String str):用str替换StringBuilder中指定位置的字符。
StringBuilder.Remove:从当前 StringBuilder 对象中移除指定数量的字符。
delete(int start, int end)、deleteCharAt(int index):删除从start到end间的字符(不包括end)。
StringBuilder.reverse():倒序排列字符。
ToString( ):转换为字符串输出
StringBuilder是jdk5.0中新增的类,在之前使用的是java.lang.String.Buffer。事实上,StingBuilder被设计为与StringBuffer具有相同操作的接口。在单机非多线程的情况下使用StringBuilder会有较高的效率,这是因为StringBuilder没有处理同步(Synchronized)问题。而StringBuffer则会处理同步问题,其在多线程中应用较多。