public class Test {
public static void main(String[] args) {
String str="abc";
String str1 = "a";
String str2 = "bc";
String combo1 = "a" + "bc"; //第一種情況
String combo2=str1+str2; //第二種情況
System.out.println(str==combo1);
System.out.println(str==combo2);
System.out.println(combo1==combo2);
}
}
輸出:
true
false
false
第一種情況:至今在常量池中相加,及還是在棧區中進行
第二種情況:對於上述情況,若str1,str2采用String定義,拼接時需要額外創建一個StringBuffer(或StringBuilder,combo2就是新建的StringBuilder
),之后將StringBuffer轉換為String,在此處new了一個對象,因此實在堆區中進行的
因此答案就很清楚了,一個在棧區一個堆區,最后結果不可能一樣
還有記住一點:String是一個常量,一旦初始化,不會再改變。
