Подтвердить что ты не робот

Почему примитив Java char занимает 2 байта памяти?

Есть ли какая-либо причина, по которой примитивный тип данных Java char составляет 2 байта в отличие от C, который равен 1 байт?

Спасибо

4b9b3361

Ответ 1

Когда Java изначально была спроектирована, предполагалось, что любой символ Юникода будет вписываться в 2 байта (16 бит), поэтому char и Character были разработаны соответствующим образом. Фактически, символ Unicode теперь может потребовать до 4 байтов. Таким образом, UTF-16, внутренняя кодировка Java, требует, чтобы дополнительные символы использовали 2 блока кода. Символы в базовой многоязычной плоскости (наиболее распространенные) все еще используют 1. Для каждого блока кода используется Java char. Эта статья статья Sun хорошо объясняет это.

Ответ 2

char в Java кодируется UTF-16, для которого требуется минимум 16 бит памяти для каждого символа.

Ответ 3

В Java символ кодируется в UTF-16, который использует 2 байта, в то время как нормальная строка C более или менее просто связка байтов. Когда C был разработан, использование ASCII (которое охватывает только набор символов на английском языке), было сочтено достаточным, в то время как разработчики Java уже учитывали интернационализацию, Если вы хотите использовать Unicode с строками C, UTF-8 является предпочтительным способом, так как он имеет ASCII в качестве подмножества и не использует 0 байт (в отличие от UTF-16), который используется как маркер конца строки в C. Такой маркер конца строки не нужен в Java, поскольку здесь здесь сложный тип с явной длиной.

Ответ 4

В предыдущих языках, таких как C ASCII, используются обозначения. И диапазон 127, для 127 уникальных символов и символов языка.

В то время как JAVA поставляется с функцией "INTERNATIONALIZATION" , то есть все символы Human Readable (включая Региональные символы) также добавлены в нем, и диапазон также увеличивается, поэтому требуется больше памяти, система для объединения всех этих символов "Стандартная система Unicode" , и поэтому для этого Унификация требуется дополнительный байт в JAVA.

Первый байт остается таким, как он есть, и символы ASCII варьируются до 127, как в C, С++, но объединенные символы добавляются к ним.

Итак, 16 бит для char в JAVA и 8 бит для char в C.

Ответ 5

Java используется как интернационализация, поэтому ее работа на разных языках и необходимость в размещении более одного байта, поэтому ее занимает 2 байта пространства в char. например, китайский язык не может защитить один байт char.

Ответ 6

Как мы знаем, c suppors ASCII, где java поддерживает Unicode, который содержит 3 вещи, которые 1-ASCII 2-расширенный ASCII 3-локальный язык ASCII - это подмножество unicode.ASCII поддерживает только английский язык, где Unicode поддерживает язык многонациональных языков. Другой символ java кодируется в UTF-16, который использует 2 байта. По всей причине и поскольку Unicode является расширенной версией ASCII, он использует 16 бит insted из 8 бит.