Есть ли причина, по которой примитивный тип данных Java char составляет 2 байта, в отличие от C, который составляет 1 байт?
Спасибо
Есть ли причина, по которой примитивный тип данных Java char составляет 2 байта, в отличие от C, который составляет 1 байт?
Спасибо
При первоначальной разработке Java предполагалось, что любой символ Unicode будет помещаться в 2 байта (16 бит), поэтому char
и Character
были спроектированы соответствующим образом. Фактически, символ Юникода теперь может занимать до 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 как string здесь сложный тип с явно заданной длиной.
В предыдущих языках, таких как C, использовались нотации ASCII. И диапазон составляет 127 для 127 уникальных символов и символов языка.
Хотя JAVA поставляется с функцией под названием "ИНТЕРНАЦИОНАЛИЗАЦИЯ", в нее также добавляются все удобочитаемые символы (включая региональные символы), и диапазон также увеличивается , поэтому требуется больше памяти , система для объединения всех этих символов - "Стандартная система Unicode", и поэтому для этой унификации требуется этот дополнительный байт в ЯВА.
Первый байт остается прежним, а символы ASCII ранжируются до 127, как в C, C++, но к ним добавляются унифицированные символы.
Итак, 16 бит для char в JAVA и 8 бит для char в C.
Тип данных char представляет собой один 16-битный символ Unicode. Он имеет минимальное значение «\ u0000» (или 0) и максимальное значение «\ uffff» (или 65 535 включительно).
Java использует представление UNICODE (Universal Code), которое принимает все языковые форматы в мире.
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
Java используется как интернационализация, поэтому она работает на разных языках и требует более одного байта, поэтому она занимает 2 байта в char. например, китайский язык не может обрабатывать один байт char.
Как мы знаем, c поддерживает ASCII, тогда как java поддерживает Unicode, который содержит 3 вещи: 1-ASCII 2-расширенный ASCII 3-символ местного языка ASCII является подмножеством unicode.ASCII поддерживает только английский язык, тогда как Unicode поддерживает многонациональный язык. символ кодируется в UTF-16, который использует 2 байта. По всей причине, и поскольку Unicode является расширенной версией ASCII, поэтому он использует 16 бит вместо 8 бит.