删除字符 - 删除索引或删除内存位置


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字符串末尾有额外的字符空间,这些空格将用于某些后续插入或追加操作。

最新更新