String.chars()和String.codePoints()上的javadoc是否不正确?

时间:2014-05-29 09:50:04

标签: java string javadoc java-8

查看Java 8中的String.chars()方法,我们可以看到以下javadoc

  

默认IntStream chars()

     

返回一个int流,对此序列中的char值进行零扩展。映射到代理代码点的任何char都会通过未解释的传递。

     

如果在读取流时序列发生了变异,则结果是未定义的。

     

返回:
      来自此序列的char值的IntStream
  因为:
      1.8

我们可以看到,我们必须在CharSequence中找到此javadoc,因为它未在String中重新定义。这里的相同论点也适用于String.codePoints()

javadoc描述:
如果在读取流时序列发生变异,则结果未定义。

但是字符串(与CharSequence相对)是不可变的,因此String类的javadoc不正确吗?我的感觉是它在逻辑下仍然是正确的,但它也意味着chars[]中的String可以被变异,这直接违背了不变性。

1 个答案:

答案 0 :(得分:6)

嗯,它只是一个语言相关的语义问题。 javadoc适用于任何char序列,可变或不可变。它说 if 序列被修改,那么这些方法的结果是不确定的。

当在String上调用此方法时,无法修改序列,因为字符串是不可变的。

上述并不意味着Strings因为这种方法而失去了不变性。

就像句子"如果动物有腿,那么它可以走路"并不意味着所有动物都有腿。