String, StringBuffer, StringBuilder之间的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String, StringBuffer, StringBuilder之间的区别相关的知识,希望对你有一定的参考价值。

String与StringBuffer/StringBuilder之间的主要区别

1.String对象不可变, 如果修改会重新创建一个对象, 然后把值保存进去. StringBuffer/StringBuilder对象是可变的.

2.String性能远远低于StringBuffer/StringBuilder

3.StringBuilder速度稍快于StringBuffer, 但与此带来的缺陷是StringBuilder是线程不安全的, 而StringBuffer是线程安全的.

 

下面执行一段代码来测试一下三者的运行时间

 1 // 测试String StringBuffer StringBuilder
 2 public class Test {
 3     public static void main(String[] args) {
 4         testString();
 5         testStringBuffer();
 6         testStringBuilder();
 7     }
 8     
 9     // 2万次为37097毫秒
10     public static void testString() {
11         String testStr = "abcdefghijklmnopqrstuvwxyz";
12         long start = System.currentTimeMillis();
13         String str = "";
14         for (int i = 0; i < 20000; i++) {
15             str += testStr;
16         }
17         long end = System.currentTimeMillis();
18         System.out.println(end-start);
19     }
20     
21     // 20万次为55毫秒
22     public static void testStringBuffer() {
23         String testStr = "abcdefghijklmnopqrstuvwxyz";
24         long start = System.currentTimeMillis();
25         StringBuffer sb = new StringBuffer();
26         for (int i = 0; i < 200000; i++) {
27             sb.append(testStr);
28         }
29         long end = System.currentTimeMillis();
30         System.out.println(end-start);
31     }
32     
33     // 20万次为34毫秒
34     public static void testStringBuilder() {
35         String testStr = "abcdefghijklmnopqrstuvwxyz";
36         long start = System.currentTimeMillis();
37         StringBuilder sb = new StringBuilder();
38         for (int i = 0; i < 200000; i++) {
39             sb.append(testStr);
40         }
41         long end = System.currentTimeMillis();
42         System.out.println(end-start);
43     }
44 }

发现 String和StringBuffer/StringBuilder之间的执行速度差别巨大, 而StringBuilder稍快于StringBuffer.(为了使StringBuffer和StringBuilder之间差距明显一些, 我在这里循环了20万次)

 

使用建议

操作少量数据 用String

字符串经常改变的情况下, 使用StringBuffer/StringBuilder

操作大量数据  单线程->StringBuilder 多线程->StringBuffer(两者执行速度差异不大, 为了多线程安全问题, 建议使用StringBuffer)

 

 

 

 

以上是关于String, StringBuffer, StringBuilder之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

String/StringBuilder/StringBuffer

String,StringBuffer,StringBuilder效率优先关系说明

string和stringbuffer的执行速度

Java基础之String,StringBuilder,StringBuffer

从为什么String=String谈到StringBuilder和StringBuffer

java中String StringBuilder 和 StringBuffer的联系与区别