В соответствии с спецификацией Java SE 7 Java использует стандарт Unicode UTF-16 для представления символов.
Представляя String
как простой массив из 16-битных переменных, каждый из которых содержит один символ, жизнь проста.
К сожалению, есть кодовые точки, для которых 16 бит просто недостаточно (я считаю, что это 16/17-й из всех символов Unicode). Таким образом, в String
это не представляет никакой прямой проблемы, потому что, когда вы хотите сохранить один из этих символов ~ 1.048.576 с использованием дополнительных двух байтов, будут использоваться только две позиции в этом String
.
Это, без какой-либо прямой проблемы, работает для String
s, потому что всегда могут быть дополнительные два байта. Хотя, когда речь идет о одиночных переменных, которые в отличие от кодировки UTF-16 имеют фиксированную длину 16 бит, как эти символы могут быть сохранены, и, в частности, как это делает Java со своим 2-байтным "char"?