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

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

Спасибо

8 ответов

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

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

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

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

В то время как JAVA поставляется с функцией, называемой "ИНТЕРНАЦИОНАЛИЗАЦИЯ", то есть все читаемые человеком символы (включая региональные символы) также добавляются в него, и диапазон также увеличивается, поэтому чем больше требуется памяти, тем больше система для объединения всех этих символов. "Стандартная система Unicode", и поэтому для этого объединения требуется дополнительный байт в JAVA.

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

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

Учебные руководства по Java™:

Тип данных char - это один 16-битный символ Unicode. Он имеет минимальное значение "\u0000" (или 0) и максимальное значение "\uffff" (или 65 535 включительно).

Java использует представление UNICODE (универсальный код), которое принимает все языковые форматы в мире.

           ASCII  American Standard Code for Information Exchange

     ISO 8859-1 for western European Countries

     KOI-8 for Russian

     GB10830 & BIG-5 for Chinese
         

В этом 1 байт зарезервирован для ASCII, а оставшийся 1 байт может принимать любой другой язык => 2 байта для char

в то время как C / C ++ использует только представление ASCII => 1 байт для char

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

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

Другие вопросы по тегам