StringBuilder s=new StringBuilder(str);
s.deleteCharAt(0);
比方說,我們有一個字符串"abcde"
和使用deleteCharAt()
功能,我們刪除字符'c'
。該功能是否也刪除了存儲位置。字符'c'
在索引2處。在刪除字符後,它是否用空格替換字符或刪除索引和內存位置?刪除字符 - 刪除索引或刪除存儲位置
StringBuilder s=new StringBuilder(str);
s.deleteCharAt(0);
比方說,我們有一個字符串"abcde"
和使用deleteCharAt()
功能,我們刪除字符'c'
。該功能是否也刪除了存儲位置。字符'c'
在索引2處。在刪除字符後,它是否用空格替換字符或刪除索引和內存位置?刪除字符 - 刪除索引或刪除存儲位置
調用deleteCharAt
實際執行這段代碼:
System.arraycopy(value, index+1, value, index, count-index-1);
count--;
這意味着字符串覆蓋刪除字符它複製休息。所以在你的例子中,它會複製「de」來覆蓋'c',使它看起來像「abdee」,然後count--
使它最終「abde」。
所以是的,你可以假設它刪除了內存位置,而不是用空字符替換它。
感謝您的幫助,那麼這意味着如果我們有一個字符串「peter」,我們使用刪除字符函數刪除字符't',結果將是'peer'而不是'pe er'?確切地說, –
。這將是同行而不是呃。你可以自己嘗試一下。 –
感謝您的幫助 –
正如Islan Hassan所說的,要刪除的字符後面的字符串部分被內部字符數組中的一個char複製,StringBuilder
用於存儲字符串。但是它不會縮小數組的大小,因此以這種方式使用deleteCharAt
將永遠不會釋放任何內存。相反,維持StringBuilder
的容量。在StringBuilder
的字符串末尾現在有一個額外字符的空間,該字符將用於某些後續插入或附加操作。
'StringBuilder'由一個數組支持,所以數組內容被移位,所以內存位置本身不會改變,只是它引用的內容 – MadProgrammer