String, StringBuffer, StringBuilder之间的区别
String與StringBuffer/StringBuilder之間的主要區(qū)別
1.String對(duì)象不可變, 如果修改會(huì)重新創(chuàng)建一個(gè)對(duì)象, 然后把值保存進(jìn)去. StringBuffer/StringBuilder對(duì)象是可變的.
2.String性能遠(yuǎn)遠(yuǎn)低于StringBuffer/StringBuilder
3.StringBuilder速度稍快于StringBuffer, 但與此帶來(lái)的缺陷是StringBuilder是線程不安全的, 而StringBuffer是線程安全的.
?
下面執(zhí)行一段代碼來(lái)測(cè)試一下三者的運(yùn)行時(shí)間
1 // 測(cè)試String StringBuffer StringBuilder 2 public class Test { 3 public static void main(String[] args) { 4 testString(); 5 testStringBuffer(); 6 testStringBuilder(); 7 } 8 9 // 2萬(wàn)次為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萬(wàn)次為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萬(wàn)次為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 }發(fā)現(xiàn) String和StringBuffer/StringBuilder之間的執(zhí)行速度差別巨大, 而StringBuilder稍快于StringBuffer.(為了使StringBuffer和StringBuilder之間差距明顯一些, 我在這里循環(huán)了20萬(wàn)次)
?
使用建議
操作少量數(shù)據(jù) 用String
字符串經(jīng)常改變的情況下, 使用StringBuffer/StringBuilder
操作大量數(shù)據(jù) ?單線程->StringBuilder 多線程->StringBuffer(兩者執(zhí)行速度差異不大, 為了多線程安全問(wèn)題, 建議使用StringBuffer)
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/lwn007/p/7677623.html
總結(jié)
以上是生活随笔為你收集整理的String, StringBuffer, StringBuilder之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: CentOS赋予一个普通用户root权限
- 下一篇: 【42.59%】【codeforces