Почему примитив Java char занимает 2 байта памяти? - PullRequest
30 голосов
/ 18 октября 2010

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

Спасибо

Ответы [ 7 ]

49 голосов
/ 18 октября 2010

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

20 голосов
/ 18 октября 2010

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

9 голосов
/ 18 октября 2010

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

4 голосов
/ 18 сентября 2015

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

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

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

Таким образом, 16-битные для char в JAVA и 8-битные для char в C.

0 голосов
/ 11 февраля 2018

Java ™ Tutorials :

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

0 голосов
/ 22 февраля 2016

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

0 голосов
/ 17 февраля 2015

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

...