String str = "abc";
String str2 = "qaz";
String str3 = "qaz";
System.out.println(str == str2); // false
System.out.println(str2 == str3); // true
str3 = "asd"; // 會在JVM的 Heap memory區塊的 string constant pool 新增一個 asd的字串並分配新地址
一開始宣告的str2與str3都是"qaz"
當宣告str2="qaz"時,string constant pool會新增一個存取"qaz"字串的位子並配予地址107
接著宣告str3="qaz",string constant pool會先檢查是否已經有"qaz"這個字串,如果已經存在,那麼就會將該地址107給到str3做指向
在程式第8行的時候將str3的值改為"asd",string constant pool 檢查此字串不存在,所以新增一個 asd的字串並分配新地址113,因此str3所指向的地址由107變為113
雖然表面上改變了字串內容,但底層,在記憶體中,只是分配了不同的地址給你的變數做指向
如果希望真的直接改變記憶體中字串的內容
使用StringBuffer(Thread-safe)或StringBuilder(not Thread-safe)