為什麼在 Java 中使用迴圈時要小心字串連線 (+) 運算子?
字串用於在 Java 中儲存一系列字元,它們被視為物件。java.lang 包的 String 類表示一個字串。
您可以使用 new 關鍵字(像任何其他物件一樣)或透過為字面量賦值(像任何其他原始資料型別一樣)來建立一個字串。
Public class Sample{
Public static void main(String args[]){
String str1 = "Hello";
String str2 = "how are you";
}
}Java 中的字串是不可變的,也就是說,一旦建立了字串字面量,就不能修改它。
儲存
由於我們定義的所有字串值都是 String 類的物件,因此它們儲存在堆區域。但是,與其他物件在單獨的記憶體位置不同,為字串物件分配了一個稱為字串常量池的單獨記憶體位置。
每當你定義一個字串值時,JVM 都會在字串常量池中建立一個具有給定值的字串物件。因此,如果你執行上面的程式,將在字串常量池中建立兩個字串值。

兩個字串的連線
如果你嘗試連線這兩個字串值,如下所示:
str1 = str2 + str2;
由於 Java 中的字串是不可變的,因此不會修改 str1,而是會建立一個新的(中間)字串物件,其中包含連線後的值,並將其賦值給引用 str1。

如果你在迴圈中連線字串,則每次迭代都會在字串常量池中建立一個新的中間物件。這不推薦,因為它會導致記憶體問題。因此,不推薦如下例所示在迴圈中連線字串。
示例
public class StringExample {
public static void main(String args[]) {
String stringArray[] = {"Java", "JavaFX", "HBase", "Oracle"};
String singleString = new String();
for (int i=0; i<stringArray.length; i++) {
singleString = singleString+stringArray[i]+" ";
}
System.out.println(singleString);
}
}輸出
Java JavaFX HBase Oracle
示例
如果你需要在迴圈中新增字串值,建議使用 StringBuilder 而不是 String:
public class StringExample {
public static void main(String args[]) {
String stringArray[] = {"Java", "JavaFX", "HBase", "Oracle"};
StringBuilder singleString = new StringBuilder();
for (int i=0; i<stringArray.length; i++) {
singleString.append(stringArray[i]);
singleString.append(" ");
}
System.out.println(singleString);
}
}輸出
Java JavaFX HBase Oracle
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP