String、StringBuffer、StringBuilder的性能测试
2008-11-03 15:18
483 查看
个人理解
String 为固定长度的不可变的字符串
StringBuilder 为可变的,且提供个最好的性能,其代码如下
view plaincopy to clipboardprint?
public StringBuilder append(int i) {
super.append(i);
return this;
}
public StringBuilder append(int i) {
super.append(i);
return this;
}view plaincopy to clipboardprint?
StringBuffer 为可变的,且提供了同步安全的机制,代码如下<PRE class=java name="code"> public synchronized StringBuffer append(int i) {
super.append(i);
return this;
}</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code">可以看到2个的区别就是StringBuffer是同步的 synchronized </PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG><FONT size=4>下面是3个性能测试代码</FONT></STRONG></PRE>
<PRE class=java name="code"><PRE class=java name="code">import java.util.Map;
public class MyTest {
/**
* @param args
*/
public static void main(String[] args) {
testString();
testStringBuilder();
testStringBufer();
}
static int NUMBER = 10000;
public static void testString() {
long begin = System.currentTimeMillis();
String str = "";
for (int i = 1; i < NUMBER; i++) {
str = str + i;
}
System.out.println("testString=" + (System.currentTimeMillis() - begin));
}
public static void testStringBuilder() {
long begin = System.currentTimeMillis();
StringBuilder b = new StringBuilder();
for (int i = 1; i < NUMBER; i++) {
b.append(i);
}
String str = b.toString();
System.out.println("testStringBuilder=" + (System.currentTimeMillis() - begin));
}
public static void testStringBufer() {
long begin = System.currentTimeMillis();
StringBuffer b = new StringBuffer();
for (int i = 1; i < NUMBER; i++) {
b.append(i);
}
String str = b.toString();
System.out.println("testStringBufer=" + (System.currentTimeMillis() - begin));
}
}</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG>运行结果如下</STRONG></PRE>
<PRE class=java name="code">testString=750<BR>testStringBuilder=0<BR>testStringBufer=0<BR></PRE>
<PRE class=java name="code">可见String的操作是非常消耗资源的,而另外2个则性能优异。</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code">对于StringBuilder和StringBuffer的对比,就没有必要了。他们的代码相同,只是缺少了同步而已。</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG><FONT size=4>结论</FONT></STRONG></PRE>
<PRE class=java name="code">大多是情况下,StringBuilder是很好的选择</PRE>
</PRE>
String 为固定长度的不可变的字符串
StringBuilder 为可变的,且提供个最好的性能,其代码如下
view plaincopy to clipboardprint?
public StringBuilder append(int i) {
super.append(i);
return this;
}
public StringBuilder append(int i) {
super.append(i);
return this;
}view plaincopy to clipboardprint?
StringBuffer 为可变的,且提供了同步安全的机制,代码如下<PRE class=java name="code"> public synchronized StringBuffer append(int i) {
super.append(i);
return this;
}</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code">可以看到2个的区别就是StringBuffer是同步的 synchronized </PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG><FONT size=4>下面是3个性能测试代码</FONT></STRONG></PRE>
<PRE class=java name="code"><PRE class=java name="code">import java.util.Map;
public class MyTest {
/**
* @param args
*/
public static void main(String[] args) {
testString();
testStringBuilder();
testStringBufer();
}
static int NUMBER = 10000;
public static void testString() {
long begin = System.currentTimeMillis();
String str = "";
for (int i = 1; i < NUMBER; i++) {
str = str + i;
}
System.out.println("testString=" + (System.currentTimeMillis() - begin));
}
public static void testStringBuilder() {
long begin = System.currentTimeMillis();
StringBuilder b = new StringBuilder();
for (int i = 1; i < NUMBER; i++) {
b.append(i);
}
String str = b.toString();
System.out.println("testStringBuilder=" + (System.currentTimeMillis() - begin));
}
public static void testStringBufer() {
long begin = System.currentTimeMillis();
StringBuffer b = new StringBuffer();
for (int i = 1; i < NUMBER; i++) {
b.append(i);
}
String str = b.toString();
System.out.println("testStringBufer=" + (System.currentTimeMillis() - begin));
}
}</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG>运行结果如下</STRONG></PRE>
<PRE class=java name="code">testString=750<BR>testStringBuilder=0<BR>testStringBufer=0<BR></PRE>
<PRE class=java name="code">可见String的操作是非常消耗资源的,而另外2个则性能优异。</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code">对于StringBuilder和StringBuffer的对比,就没有必要了。他们的代码相同,只是缺少了同步而已。</PRE>
<PRE class=java name="code"> </PRE>
<PRE class=java name="code"><STRONG><FONT size=4>结论</FONT></STRONG></PRE>
<PRE class=java name="code">大多是情况下,StringBuilder是很好的选择</PRE>
</PRE>
相关文章推荐
- String、StringBuffer、StringBuilder 性能测试
- String、StringBuffer、StringBuilder的性能测试
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- Java中字符串操作类String、StringBuffer、StringBuilder区别及性能对比测试
- String,StringBuffer,StringBuilder性能比较,线程安全测试,源码解析。
- String,StringBuffer,StringBuilder性能分析
- String,StringBuffer,StringBuilder区别及性能详解
- Java的String与StringBuffer、StringBuilder的性能比较
- String,StringBuffer,StringBuilder性能比较
- String,StringBuffer,StringBuilder的性能比较
- String,StringBuffer和StringBuilder,看测试结果是否和你的想法吻合?
- string,stringBuffer,stringBuilder性能分析
- String,StringBuffer,StringBuilder三者性能
- String、StringBuffer和StringBuilder的性能对比
- String, StringBuffer 和Stringbuilder的区别以及性能差异
- java String和Stringbuffer性能测试结果
- String、StringBuffer、StringBuilder区分和性能比较
- Java的String与StringBuffer、StringBuilder的性能比较
- String,StringBuilder,StringBuffer的对比测试