Почему примитив Java char занимает 2 байта памяти?
Есть ли какая-либо причина, по которой примитивный тип данных Java char составляет 2 байта в отличие от C, который равен 1 байт?
Спасибо
Ответы
Ответ 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 бит.