Кодовая точка соответствует одному символу Unicode.
Java представляет Unicode в UTF-16, то есть в 16-битных единицах.Символы со значениями кодовой точки больше, чем U + FFFF, представлены парой «суррогатных символов», как в первом примере.Таким образом, первый результат 3.
Во втором случае у вас есть пример, который не является единственным символом Unicode.Это один символ, буква G, за которым следует другой символ, сочетающий в себе символ LOW LINE.Это две кодовые точки в определении.Таким образом, второй результат 4.
В общем, Unicode имеет таблицы символьных атрибутов (я не уверен, что у меня есть правильное слово здесь), и можно выяснить, что одна из ваших кодовых точек являетсясовмещающий характер.
Посмотрите на класс символов.getType (символ) скажет вам, является ли кодовая точка комбинирующим символом или суррогатом.