[英]What is the time complexity of StringBuilder.append() in java?
[英]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.