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是一個常量,一旦初始化,不會再改變。