黑马程序员——String StringBuffer StringBuilder的区别

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
  • String:定长的字符串,它的内容是不可以改变的,正因为如此,编译器可以让字符串共享.
  • StringBuffer:可变长的字符串缓冲区,多线程操作是安全的,并且在字符串连接操作上提供了性能和效率都优于String类的"+"的append()方法,因此如果需要大量的频繁的进行字符连接操作时,优先采用StringBuffer的append()方法.如果只是简单的字符串连接可以采用String的"+"来提高代码的可读性.
  • StringBuilder:是StringBuilder的一个等价类,区别在于StringBuilder是非线程安全的,但正因为如此少了很多同步的操作,在效率上要高于StringBuilder,因此如果不涉及多线程操作,可以优先考虑StringBuilder来提高方法的执行效率.
Java代码   收藏代码
  1. public class StringTest {  
  2.     /** 
  3.      * main method 
  4.      *  
  5.      * @param args 
  6.      */  
  7.     public static void main(String[] args) {  
  8.         String s = "test";  
  9.         // String test  
  10.         String str = "";  
  11.         long str_start = System.currentTimeMillis();  
  12.         for (int i = 0; i < 100000; i++) {  
  13.             str += s;  
  14.         }  
  15.         long str_end = System.currentTimeMillis();  
  16.         System.out.println("String need time is : " + (str_end - str_start));  
  17.   
  18.         // StringBuffer test  
  19.         StringBuffer s_buffer = new StringBuffer("");  
  20.         long buf_start = System.currentTimeMillis();  
  21.         for (int i = 0; i < 100000; i++) {  
  22.             s_buffer.append(s);  
  23.         }  
  24.         long buf_end = System.currentTimeMillis();  
  25.         System.out.println("StringBuffer need time is :"  
  26.                 + (buf_end - buf_start));  
  27.   
  28.         // StringBuilder testF  
  29.         StringBuilder s_builder = new StringBuilder("");  
  30.         long bui_start = System.currentTimeMillis();  
  31.         for (int i = 0; i < 100000; i++) {  
  32.             s_builder.append(s);  
  33.         }  
  34.         long bui_end = System.currentTimeMillis();  
  35.         System.out.println("StringBuilder need time is : "  
  36.                 + (bui_end - bui_start));  
  37.     }  
  38. }  
  • 运行结果如下:
String need time is : 129765
StringBuffer need time is :10
StringBuilder need time is : 3

  • String,StringBuffer和StringBuider虽都属于字符串类型,但是在使用的时候不能混用,需要根据实际情况选择合适的字符串类型.有关它们更详细的介绍,请参考文档.

  • string中"+"实现字符串连接分析:
示例代码:
Java代码   收藏代码
  1. public class PlusTest {  
  2.   
  3.     public static void main(String[] args) {  
  4.         String a = "a";  
  5.         String b = "b";  
  6.         String c = a + b;  
  7.         String d = c + 1;  
  8.     }  
  9. }  
 
将上述代码编译后再反编译,得到的代码:

Java代码   收藏代码
  1. public class PlusTest  
  2. {  
  3.   
  4.     public PlusTest()  
  5.     {  
  6.     }  
  7.   
  8.     public static void main(String args[])  
  9.     {  
  10.         String a = "a";  
  11.         String b = "b";  
  12.         String c = (new StringBuilder(String.valueOf(a))).append(b).toString();  
  13.         String d = (new StringBuilder(String.valueOf(c))).append(1).toString();  
  14.     }  
  15. }  
 通过反编译的结果可以看出,"+"实现字符串连接的过程中,实际上是借助了StringBuilder类的append方法,每拼接一次都要实例化一个StringBuilder对象,效率低是必然的.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值