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"。
所以是的,您可以假设它删除了内存位置,而不仅仅是用空字符替换它。
正如 Islam Hassan 所说,要删除的字符之后的字符串部分由内部 char 数组中的一个字符复制回来,StringBuilder
该数组用于存储字符串。但是,它不会缩小数组的大小,因此以这种方式使用deleteCharAt
永远不会释放任何内存。相反,StringBuilder
的容量保持不变。现在,StringBuilder
字符串末尾有额外的字符空间,这些空格将用于某些后续插入或追加操作。