Почему примитив 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.
Тип данных 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. Например, китайский язык не может обработать один байт символа.