Размер символа в Java против C

Почему персонаж в Java занимает в два раза больше места для хранения в качестве символа в C?

Ответы

Ответ 1

В Java символы 16-бит, а C - 8-разрядные.

Более общий вопрос: почему это так?

Чтобы узнать, почему вам нужно посмотреть историю и прийти к выводам / мнениям по этому вопросу.

Когда C был разработан в США, ASCII был довольно стандартным, и вам понадобятся только 7 бит, но с 8 вы можете обрабатывать некоторые не-ASCII-символы. Это может показаться более чем достаточно. Многие текстовые протоколы, такие как SMTP (электронная почта), XML и FIX, по-прежнему используют только символ ASCII. Электронная почта и XML кодируют символы не ASCII. Двоичные файлы, сокеты и поток по-прежнему являются только 8-разрядными байтами.

BTW: C может поддерживать более широкие символы, но это не просто char

Когда Java была разработана, 16-разрядная версия казалась достаточной для поддержки большинства языков. С тех пор unicode был расширен до символов выше 65535, и Java пришлось добавить поддержку кодовых точек, которые являются символами UTF-16, и может быть одним или двумя 16-разрядными символами.

Таким образом, для byte байта и char значение unsigned 16-bit значение имеет смысл в то время.

BTW: Если ваш JVM поддерживает -XX:+UseCompressedStrings, он может использовать байты вместо символов для строк, которые используют только 8-битные символы.

Ответ 2

Поскольку Java использует Unicode, C обычно использует ASCII по умолчанию.

Существуют различные варианты кодировки Unicode, но Java использует UTF-16, который использует один или два 16-разрядных кодовых блока на символ. ASCII всегда использует один байт на символ.

Ответ 4

Java - это современный язык, поэтому он поддерживает Unicode по умолчанию, как и многие новые языки сегодня (например, С#). Напротив, C является "древним" языком из эпохи 7-битного ASCII, поэтому по умолчанию используется 8-бит char. Когда вы приходите в Unicode раз, для того, чтобы не делать старые разрывы кода, они решили использовать другой тип символа, который является wchar_t

Ответ 5

Java char - это кодовая точка Unicode с кодировкой UTF-16, в то время как C использует кодировку ascii в большинстве случаев.