玩玩String的字符串拼接底层原理

package com.pan;

public class A {
	
	public static void main(String args[]) {
		//调用B类
		String a="abc";
		String b="def";
		String c=a+b+"adg";
		String d=new String()+"ggg";
		System.out.println(d.length());
		
	}

}

翻译出来的样子

// Compiled from A.java (version 1.8 : 52.0, super bit)
public class com.pan.A {
  
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public A();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: com.pan.A
  
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 4, Locals: 5
  public static void main(java.lang.String[] args);
     0  ldc <String "abc"> [16]
     2  astore_1 [a]
     3  ldc <String "def"> [18]
     5  astore_2 [b]
     6  new java.lang.StringBuilder [20]
     9  dup
    10  aload_1 [a]
    11  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [22]
    14  invokespecial java.lang.StringBuilder(java.lang.String) [28]
    17  aload_2 [b]
    18  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]
    21  ldc <String "adg"> [35]
    23  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]
    26  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [37]
    29  astore_3 [c]
    30  new java.lang.StringBuilder [20]
    33  dup
    34  new java.lang.String [23]
    37  dup
    38  invokespecial java.lang.String() [41]
    41  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [22]
    44  invokespecial java.lang.StringBuilder(java.lang.String) [28]
    47  ldc <String "ggg"> [42]
    49  invokevirtual java.lang.StringBuilder.append(java.lang.String) : java.lang.StringBuilder [31]
    52  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [37]
    55  astore 4 [d]
    57  getstatic java.lang.System.out : java.io.PrintStream [44]
    60  aload 4 [d]
    62  invokevirtual java.lang.String.length() : int [50]
    65  invokevirtual java.io.PrintStream.println(int) : void [54]
    68  return
      Line numbers:
        [pc: 0, line: 7]
        [pc: 3, line: 8]
        [pc: 6, line: 9]
        [pc: 30, line: 10]
        [pc: 57, line: 11]
        [pc: 68, line: 13]
      Local variable table:
        [pc: 0, pc: 69] local: args index: 0 type: java.lang.String[]
        [pc: 3, pc: 69] local: a index: 1 type: java.lang.String
        [pc: 6, pc: 69] local: b index: 2 type: java.lang.String
        [pc: 30, pc: 69] local: c index: 3 type: java.lang.String
        [pc: 57, pc: 69] local: d index: 4 type: java.lang.String
}


我理解的样子

package com.pan;

public class A {
	
	public static void main(String args[]) {
		//调用B类
		String a="abc";
		String b="def";
		String c=a+b+"adg";//new StringBuilder(a).append(b).append(adg).toString();
		String d=new String()+"ggg";//new StringBuilder(new String()).append("ggg").toString;
		System.out.println(d.length());
		
	}

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值