Ответ 1
Краткий ответ: он дает вам кодовую точку Unicode, которая начинается с указанного индекса в String
. то есть "номер юникода" символа в этой позиции.
Более длинный ответ: Java была создана, когда 16-битный (он же char
) был достаточен для хранения любого существующего символа Юникода (эти части теперь известны как Базовая многоязычная плоскость или BMP). Позже Unicode был расширен, чтобы включить символы с кодовой точкой> 2 16. Это означает, что char
больше не может содержать все возможные кодовые точки Unicode.
Решением было UTF-16: он хранит "старые" кодовые точки Unicode в 16 битах (т.е. ровно один char
), а все новые - в 32 битах (т.е. два значения char
). Эти два 16-битных значения называются "суррогатная пара". Теперь, строго говоря, char
содержит "кодовую единицу UTF-16" вместо "символа Юникода", как это было раньше.
Теперь все "старые" методы (работа только с char
) можно использовать очень хорошо, если вы не используете ни один из "новых" символов Юникода (или не заботитесь о них), но если вы заботитесь о новые символы (или просто необходимо иметь полную поддержку Unicode), тогда вам нужно будет использовать версии с "кодовой точкой", которые фактически поддерживают все возможные кодовые точки Unicode.
Примечание. Очень хорошо известным примером символов Юникода, которых нет в BMP (т. Е. Работают только при использовании варианта с кодовой точкой), являются эмодзи: даже простое Grinning Face 😀 U + 1F600 не может быть представлено в одном char
.