ASCII для исходных файлов объясняется тем, что в то время было не разумно ожидать, что люди будут иметь текстовые редакторы с полной поддержкой Unicode.С тех пор дела улучшились, но они все еще не совершенны.Вся вещь \uXXXX
в Jave по сути эквивалентна триграфам Си.(Когда C был создан, некоторые клавиатуры не имели фигурных скобок, поэтому вам приходилось использовать триграфы!)
Во время создания Java формат файла класса использовал UTF-8, а среда выполнения использовала UCS-2.Unicode имел менее 64 тыс. Кодовых точек, поэтому 16 бит было достаточно.Позже, когда в Unicode были добавлены дополнительные «плоскости», UCS-2 был заменен (в значительной степени) совместимым UTF-16, а UTF-8 был заменен на CESU-8 (отсюда и «Схема кодирования совместимости ...»).
В формате файла класса они хотели использовать UTF-8 для экономии места.Дизайн формата файла класса (включая набор инструкций JVM) был в значительной степени ориентирован на компактность.
Во время выполнения они хотели использовать UCS-2, потому что считалось, что экономия места менее важна, чем возможностьИзбегайте необходимости иметь дело с символами переменной ширины.К сожалению, этот вид имеет неприятные последствия теперь, когда это UTF-16, потому что кодовая точка теперь может принимать несколько "символов", и, что еще хуже, тип данных "char" теперь является своего рода неправильно названным (он больше не соответствует символу, в общем, новместо этого соответствует кодовой единице UTF-16).