为什么java中的String类使用char [],offset和length实现?

时间:2013-03-12 18:03:51

标签: java string

为什么java中的String类包含char[] valueint offsetint count字段。他们的目的是什么,他们完成了什么任务?

2 个答案:

答案 0 :(得分:3)

char[]数组包含构成该字符串的字符数组。

偏移和计数用于String.substring()操作。当您获取字符串的子字符串时,结果String引用原始字符数组,但存储关联的偏移量和长度(这称为flyweight pattern,并且是一种常用的节省内存的技术)< / p>

e.g。 String.substring("ABCDEF", 1, 2);

会引用A,B,C,D,E,F原始数组,但将offset设置为1并将length设置为1(因为substring方法使用start和结束指数)。请注意,由于字符数组是 immutable ,因此您可以轻松地执行此操作。你无法改变它。

注意:最近已经改变了(7u6,我相信),并且在最近的版本中不再适用。我怀疑这是因为我意识到这种优化并没有真正用到太多。

答案 1 :(得分:0)

它们允许来回传递数组作为主要对数组部分感兴趣的例程的支持。这使得人们不必担心构造大量的小阵列,从而避免了与特定操作的对象构造相关的成本。

例如,可以使用数组作为输入缓冲区,但是需要额外的数组来处理该缓冲区中的分块字符,使用数组,偏移量和计数的三个参数,您可以“模拟”从缓冲区的中间,无需创建新的(辅助)数组。

这很重要,因为虽然你可能有理由想要一个数组(java中的一个对象)来保存输入字符,但你可能不希望分配和垃圾收集数千个数组(并将字符复制到它们中)到将数据传递给只需要一个单词的东西,由空格分隔(嘿,这只是一个例子)。