Я бы предположил, что причина была быстрой: массив похож на доступ к символу по индексу, но некоторые символы не помещаются в 16 бит, поэтому он не будет работать ...
Так что если вам все равно приходится работать с особыми случаями, почему бы просто не использовать UTF-8?
Ответы:
Потому что раньше это был UCS-2 , который был хорошим 16-битным фиксированной длиной. Конечно, 16 бит оказалось недостаточно. Они модифицировали UTF-16 сверху.
источник
Originally, Unicode was designed as a pure 16-bit encoding, aimed at representing all modern scripts. (Ancient scripts were to be represented with private-use characters.) Over time, and especially after the addition of over 14,500 composite characters for compatibility with legacy sets, it became clear that 16-bits were not sufficient for the user community. Out of this arose UTF-16.
На момент выпуска Java UTF-16 еще не появился, и UTF-8 не был частью стандарта Unicode.Для основной части, ради простого и простого будущего. Была ли это ошибочная причина и неправильный путь решения - это другой вопрос.
В этом документе вы можете увидеть некоторые причины их проектных решений по поводу перехода на 2004 г. на Java 5 и UTF-16, что также объясняет некоторые недостатки: дополнительные символы в платформе Java и посмотрите, почему экосистема Java использует разные кодировки по всему стеку? ,
Для получения более подробной информации об ловушках использования UTF-16 и о том, почему UTF-8, вероятно, будет лучшим вариантом в целом, см. Следует ли считать UTF-16 вредным? и UTF-8 Везде манифест.
источник
string
создания «специального» типа в Java (во многом какArray
есть), а не того, чтобыString
быть «обычным» классом, который содержит ссылку на «обычный» массив, содержащий фактические символы. В зависимости от того, как сгенерирована строка, UTF-8, UTF-16 или даже UTF-32 могут быть наиболее эффективным способом ее хранения. Я не думаю, что есть какой-то особенно эффективный способ для «обычного» классаString
обрабатывать несколько форматов, но «специальный» тип с поддержкой JVM мог бы.