char
является зависимой частью String
- сохранение значений UTF-16. Символ Unicode, кодовая точка , иногда является суррогатной парой символов. Таким образом, любое простое решение с использованием символов chars охватывает только часть домена Unicode.
Было время, когда char
имел собственное право быть типом publi c. Но в настоящее время лучше использовать кодовые точки , IntStream
. Поток char не может напрямую обрабатывать суррогатные пары.
Другая более прозаическая причина c заключается в том, что модель "JVM-процессора" использует int
в качестве наименьшего "регистра", сохраняя логические значения, байты, шорты а также символы в таком месте хранения. Чтобы не обязательно разбрасывать java классы, один воздерживался от всех возможных вариантов копирования.
В далеком будущем можно ожидать, что примитивные типы могут функционировать как универсальные параметры типа c, обеспечивая List<int>
. Тогда мы можем увидеть Stream<char>
.
. На данный момент лучше избегать char
и, возможно, использовать java.text.Normalizer
для уникальной канонической формы кодовых точек / строк Юникода.