簡體   English   中英

java運算符`+`和`StringBuilder.append`

[英]java operator `+` and `StringBuilder.append`

有人說,當我使用+運算符來連接String它會轉換為StringBuilder.append但是當我運行Java Decompiler GUI並打開MainClass.class時,

public class MainClass
{
  public static void main(String[] paramArrayOfString)
  {
    String str1 = "abc";
    String str2 = "def";

    String str3 = str1 + str2;
  }
}

原來的時候

public class MainClass {

    public static void main(String[] args) {

        String val1 = "abc";
        String val2 = "def";

        String res = val1 + val2;

    }
}

怎么了? 我使用javac MainClass.java編譯它

大多數反編譯器會自動將編譯器生成的StringBuilder序列轉換回字符串串聯+

沒有的少數人之一是Krakatau 如果你用Krakatau反編譯你的課程,你會得到類似的東西

public class MainClass {
    public MainClass()
    {
        super();
    }

    public static void main(String[] a)
    {
        new StringBuilder().append("abc").append("def").toString();
    }
}

如您所見, StringBuilder代碼就在那里。 你也可以看一下反匯編。

.version 51 0
.source MainClass.java
.class super public MainClass
.super java/lang/Object


.method public <init> : ()V
    ; method code size: 5 bytes
    .limit stack 1
    .limit locals 1
    aload_0
    invokespecial java/lang/Object <init> ()V
    return
.end method

.method static public main : ([Ljava/lang/String;)V
    ; method code size: 26 bytes
    .limit stack 2
    .limit locals 4
    ldc 'abc'
    astore_1
    ldc 'def'
    astore_2
    new java/lang/StringBuilder
    dup
    invokespecial java/lang/StringBuilder <init> ()V
    aload_1
    invokevirtual java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    aload_2
    invokevirtual java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder;
    invokevirtual java/lang/StringBuilder toString ()Ljava/lang/String;
    astore_3
    return
.end method

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM