Попробуйте
String h="hell?";
System.out.println(h.codePointCount(0,h.length()));
System.out.println(h.length());
напечатано 5, 6.
'?' представлено двумя кодовыми единицами, каждая из которых 'h', 'e', 'l', 'l '- на единицу.
И примерно UTF-16 : «Кодирование переменной длины, поскольку кодовые точки кодируются одной или двумя 16-битными кодовыми единицами ...»