這個問題使用一個實例,就能很好地方便我們記憶
public class StringTest {
/**
* @Author Loujitao
* @Date 2018/6/21
* @Time 11:10
* @Description:
* 提示:如果有對象參與相加,編譯器沒法處理,結果爲新的對象
* 字符串常量直接相加,會先經過編譯器處理;
* 且常量使用過就是一個對象,下次使用不產生新對象。
*/
public static void main(String[] args) {
String a="1";
String b="";
String str1=a+b; //產生新對象
String str2=a+b; //產生新對象
String str3="1"+b; //有變量參與計算,產生新對象
String str4="1"+""; //編譯器自動優化 <==> String str4="1"; "1"常量字符串已被a引用過
String str5="1"+""; //同上
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str1==str4);
System.out.println(str2==str3);
System.out.println(str2==str4);
System.out.println(str3==str4);
System.out.println(str4==str5);
System.out.println(a==str5);
/** 結果顯示爲:
false
false
false
false
false
false
true
true
*/
}
}