[英]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.