Необходимо понимать разницу между char
типом данных и кодовой точкой символа.
char
- это просто 16-разрядное значение без знака. Но кодовая точка - это число, представляющее один символ Юникода. Кодовые точки кодируются с использованием кодирования UTF-16 , они могут быть представлены одним или двумя (так называемая суррогатная пара ) 16-битными значениями. Строки в Java используют эту кодировку, поэтому каждый символ может быть представлен одним или двумя значениями char
.
В подавляющем большинстве случаев кодовые точки используют только один char
, значение которого равно кодовой точке,поэтому многие программисты просто игнорируют разницу. Но метод indexOf
понимает это, и если указано число больше 0xFFFF, и это допустимая кодовая точка, то метод будет искать последовательность из двух суррогатных значений.
Обратите внимание, что результат метода, так как все смещения в строках и .length()
находятся в chars
, а не в реальных кодовых точках. Но, как упоминалось выше, в большинстве случаев вы можете просто игнорировать разницу.
См. indexOf
документация