簡體   English   中英

當Java Compiler在一行中看到許多String連接時會發生什么?

[英]What happens when Java Compiler sees many String concatenations in one line?

假設我在Java中有一個表達式,例如:

String s = "abc" + methodReturningAString() + "ghi" + 
                anotherMethodReturningAString() + "omn" + "blablabla";

Java的默認JDK編譯器的行為是什么? 它只是制作五個連接還是有智能性能技巧?

它產生相當於:

String s = new StringBuilder("abc")
           .append(methodReturningAString())
           .append("ghi")
           .append(anotherMethodReturningAString())
           .append("omn")
           .append("blablabla")
           .toString();

它足夠聰明,可以預先連接靜態字符串(即"omn" + "blablabla" 如果你願意,可以將StringBuilder的使用稱為“性能技巧”。 性能肯定比做五個連接更好,導致四個不必要的臨時字符串。 另外,使用StringBuilder是(我認為)Java 5中的性能改進; 在此之前,使用了StringBuffer。

編輯 :正如注釋中所指出的,如果靜態字符串位於連接的開頭,則它們僅被預先連接。 否則會破壞運營順序(盡管在這種情況下我認為Sun可以證明這一點)。 所以這個:

String s = "abc" + "def" + foo() + "uvw" + "xyz";

它會像這樣編譯:

String s = new StringBuilder("abcdef")
           .append(foo())
           .append("uvw")
           .append("xyz")
           .toString();

暫無
暫無

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

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