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

时间:2017-03-27 00:06:41

标签: java string

import arrow
utc = arrow.utcnow()
utc.to('Asia/Shanghai').date()

我们假设我们有一个字符串StringBuilder s=new StringBuilder(str); s.deleteCharAt(0); 并使用"abcde"函数删除字符deleteCharAt()。此功能是否也删除内存位置。字符'c'位于索引2.删除字符后,它是用空格替换字符还是删除索引和内存位置?

2 个答案:

答案 0 :(得分:0)

调用deleteCharAt实际执行此代码:

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

这意味着它会复制字符串的其余部分以覆盖已删除的字符。所以在你的例子中,它会复制“de”来覆盖'c',使它看起来像“abdee”,然后count--使它最终成为“abde”。

所以是的,你可以假设它删除了内存位置,而不是用空字符替换它。

答案 1 :(得分:0)

正如Islan Hassan所说,要删除的char后面的字符串部分被内部char数组中的一个char复制回来,f.Tag 用来存储字符串。但是它不会缩小数组的大小,因此以这种方式使用StringBuilder将不会释放任何内存。而是保持deleteCharAt的容量。现在可以在StringBuilder中的字符串末尾提供额外字符的空格,该字符串将用于某些后续插入或追加操作。