码迷,mamicode.com
首页 > 其他好文 > 详细

String, StringBuffer, StringBuilder之间的区别

时间:2017-10-16 17:57:40      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:bsp   可变   缺陷   速度   差距   public   print   改变   art   

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之间的区别

标签:bsp   可变   缺陷   速度   差距   public   print   改变   art   

原文地址:http://www.cnblogs.com/lwn007/p/7677623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!