-
字串無法更改。
假設你 resutl="hello";然後。
resutl+="test";
,相當於重新生成乙個呼叫"hello test",然後將結果指向新物件。
但你原本"test"是一樣的,只是沒有提到他。
你可以使用 stringbuffer()。'如果有 3 個以上的字元更改,可以考慮使用 stringbuffer
-
建立字串物件後,對“此物件”的引用是不可變的! 也就是說,該值是不可變的!
結果+=字段[i];
之後,將建立乙個新的字串物件,但這次對結果的引用已更改。
也就是說,這次的結果不是最後一次!
ex : string str="string1";
string str="string2";
-
你的將在這個迴圈中得到乙個錯誤! 使用返回,但尚未收到帶有變數的返回! 一句話,剛學會,我什麼都不懂基礎知識!
-
樓上,我很疑惑,我該如何解釋房東寫的迴圈錯誤。
-
正解決方案:由於字串物件在建立後實際上儲存在記憶體中的資料段中,因此將字串型別引用更改為新字串實際上會更改字串物件的引用位址,而不是實際值。
例如:string s ="abc";
s = "123";
在記憶體中,乙個在資料段區域中初始化"abc"然後將引用分配給 S 字串物件,並在第二句話中,在資料段區域中初始化另乙個引用"123"然後將引用傳遞給 s 實際上並沒有直接放置它"abc""123",問題是字串無法更改。
-
public final class string
說字串不變意味著它被定義了,final,不能被繼承,並且方法不能被重寫。
這並不是說對此物件的引用是不可變的。
-
大寫 s?你寫了自己的類,對吧? 如果是這樣,沒有人能回答你的問題。
-
字串型別的值是字串常量池中字串的第一行**由 new 建立,字串物件在字串常量池中建立"aaa",池外的堆空間也會建立乙個新物件,並將物件的位址返回給 S1,而 S1 又指向字串常量池"aaa"。
第二行也是由 new 建立的,並在字串常量池中建立乙個新的字串物件"bbb",所以當然不會改變原來的樣子"aaa",即原文"aaa"儲存它的位址仍然存在"aaa","bbb"同時,new 意味著在堆空間中建立乙個新物件並將位址返回給 s1,而 s1 又指向字串常量池"bbb",則上一行在堆空間中建立的物件將變為垃圾,因為 S1 不再指向它。
所以改變的是變數 s1 的指向,它不會改變字串常量池中的字串。