Глядя на метод String.chars()
в Java 8, мы можем видеть следующий javadoc:
default IntStream chars()
Возвращает поток int zero, расширяющий значения char из этой последовательности. Любой символ, который сопоставляется суррогатной кодовой точке, передается через неинтерпретируемый.
Если последовательность мутируется во время чтения потока, результат не определен.
Возвращает:
IntStream значений char из этой последовательности
Поскольку:
1,8
Как мы видим, нам пришлось найти этот javadoc в CharSequence
, поскольку он не был переопределен в String
. Те же аргументы здесь также относятся к String.codePoints()
.
В javadoc описано, что:
Если последовательность мутируется во время чтения потока, результат не определен.
Но строки (в отличие от CharSequence
) неизменяемы, следовательно, javadoc здесь некорректен для класса String
? Я чувствую, что он по-прежнему правилен по логике, но это также подразумевает, что chars[]
в String
могут быть мутированы, что напрямую связано с неизменностью.
Ну, это только связанная с языком, семантическая проблема. Javadoc применяется к любой последовательности символов, изменяемой или нет. В нем говорится, что если последовательность изменена, то результат этих методов не определен.
Бывает так, что при вызове этого метода в String невозможно изменить последовательность, поскольку строки являются неизменяемыми.
Вышеизложенное не означает, что Струны теряют неизменность из-за этого метода.
Подобно предложению "если у животного есть ноги, то он может ходить" не означает, что у всех животных есть ноги.