关于String 连接的一些研究


    最近我们技术老大写了个性能方面的文章,明确写出在处理字符串时,如果有连接操作,用StringBuilder 来替换之前经常使用的"+". 号称用StringBuilder append方法要比"+" 高效,但我在实际工作时发现,java编译时已对"+"进行了优化,使用"+"连接字符串java在编译时已经被优化成StringBuilder的append.


例如:

<pre name="code" class="java">    @Override
    public String toString() {
        return "ListResponseData [title=" + title + ", total=" + total
                + ", hasMore=" + hasMore + ", items=" + items + ", components="
                + components + "]";
    }


 

编译后的字节码:

  // Method descriptor #36 ()Ljava/lang/String;
  // Stack: 3, Locals: 1
  public java.lang.String toString();
     0  new java.lang.StringBuilder [69]
     3  dup
     4  ldc <String "ListResponseData [title="> [71]
     6  invokespecial java.lang.StringBuilder(java.lang.String) [73]
     9  aload_0 [this]
    10  getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.title : java.lang.String [37]
    13  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    16  ldc <String ", total="> [79]
    18  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    21  aload_0 [this]
    22  getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.total : int [43]
    25  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [81]
    28  ldc <String ", hasMore="> [84]
    30  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    33  aload_0 [this]
    34  getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.hasMore : boolean [64]
    37  invokevirtual java.lang.StringBuilder.append(boolean) : java.lang.StringBuilder [86]
    40  ldc <String ", items="> [89]
    42  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    45  aload_0 [this]
    46  getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.items : java.util.List [50]
    49  invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [91]
    52  ldc <String ", components="> [94]
    54  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    57  aload_0 [this]
    58  getfield com.yunos.gamestore.module.net.rest.response.ListResponseData.components : java.util.List [58]
    61  invokevirtual java.lang.StringBuilder.append(java.lang.Object) : java.lang.StringBuilder [91]
    64  ldc <String "]"> [96]
    66  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [75]
    69  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [98]
    72  areturn
      Line numbers:
        [pc: 0, line: 76]
        [pc: 28, line: 77]
        [pc: 57, line: 78]
        [pc: 69, line: 76]
      Local variable table:
        [pc: 0, pc: 73] local: this index: 0 type: com.yunos.gamestore.module.net.rest.response.ListResponseData
}

从字节码中可以看出,"+"已经被优化成append了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值