2017-03-27 70 views
0
StringBuilder s=new StringBuilder(str); 
s.deleteCharAt(0); 

比方說,我們有一個字符串"abcde"和使用deleteCharAt()功能,我們刪除字符'c'。該功能是否也刪除了存儲位置。字符'c'在索引2處。在刪除字符後,它是否用空格替換字符或刪除索引和內存位置?刪除字符 - 刪除索引或刪除存儲位置

+0

'StringBuilder'由一個數組支持,所以數組內容被移位,所以內存位置本身不會改變,只是它引用的內容 – MadProgrammer

回答

0

調用deleteCharAt實際執行這段代碼:

System.arraycopy(value, index+1, value, index, count-index-1); 
count--; 

這意味着字符串覆蓋刪除字符它複製休息。所以在你的例子中,它會複製「de」來覆蓋'c',使它看起來像「abdee」,然後count--使它最終「abde」。

所以是的,你可以假設它刪除了內存位置,而不是用空字符替換它。

+0

感謝您的幫助,那麼這意味着如果我們有一個字符串「peter」,我們使用刪除字符函數刪除字符't',結果將是'peer'而不是'pe er'?確切地說, –

+0

。這將是同行而不是呃。你可以自己嘗試一下。 –

+0

感謝您的幫助 –

0

正如Islan Hassan所說的,要刪除的字符後面的字符串部分被內部字符數組中的一個char複製,StringBuilder用於存儲字符串。但是它不會縮小數組的大小,因此以這種方式使用deleteCharAt將永遠不會釋放任何內存。相反,維持StringBuilder的容量。在StringBuilder的字符串末尾現在有一個額外字符的空間,該字符將用於某些後續插入或附加操作。