+ 和 StringBuilder 原理

 字符串拼接的原理:

+   和  StringBuilder

编译的实现,做了优化,+ 会 new StringBuider 进行优化,然后进行append。多次进行了new StringBuilder 然后append,效率不高,尽量自己定义StringBuilder比较好。

String total = "";  // 生成空字符串对象 String   ""
        total = "ab" + "cd";  // 生成abcd字符串对象String "abcd"
        total += "ef";   // 生成StringBuilder , append "abcd" ,append "ef", toString 方法返回
        if (1 < 2) {
            total += "higk"; // 生成StringBuilder , append "abcdef" ,append "higk"  , toString 返回
        }

 javap -l -c -p CglibDemo.class

 public static void main(java.lang.String[]) throws java.lang.Exception;
    Code:
       0: ldc           #2                  // String
       2: astore_1
       3: ldc           #3                  // String abcd
       5: astore_1
       6: new           #4                  // class java/lang/StringBuilder
       9: dup
      10: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V
      13: aload_1
      14: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      17: ldc           #7                  // String ef
      19: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      22: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      25: astore_1
      26: new           #4                  // class java/lang/StringBuilder
      29: dup
      30: invokespecial #5                  // Method java/lang/StringBuilder."<init>":()V
      33: aload_1
      34: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      37: ldc           #9                  // String higk
      39: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      42: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      45: astore_1
      46: return
    LineNumberTable:
      line 24: 0
      line 25: 3
      line 26: 6
      line 28: 26
      line 31: 46
    LocalVariableTable:
      Start  Length  Slot  Name   Signature
          0      47     0  args   [Ljava/lang/String;
          3      44     1 total   Ljava/lang/String;
 

StringBuffer 和 StringBuilder的比较:

线程安全性:StringBuffer 是线程安全的,而StringBuilder是非线程安全

缓冲区:StringBuffer采用了缓冲,而StringBuilder没有

性能:StringBudiler 远大于StringBuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值