查看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
可以被变异,这直接违背了不变性。
答案 0 :(得分:6)
嗯,它只是一个语言相关的语义问题。 javadoc适用于任何char序列,可变或不可变。它说 if 序列被修改,那么这些方法的结果是不确定的。
当在String上调用此方法时,无法修改序列,因为字符串是不可变的。
上述并不意味着Strings因为这种方法而失去了不变性。
就像句子"如果动物有腿,那么它可以走路"并不意味着所有动物都有腿。