Има ли някаква причина, поради която Java char примитивен тип данни е 2 байта за разлика от C, който е 1 байт?
Благодаря
Има ли някаква причина, поради която Java char примитивен тип данни е 2 байта за разлика от C, който е 1 байт?
Благодаря
Когато 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 като string е сложен тип тук, с изрична дължина.
В предишни езици като C ASCII се използват нотации. Диапазонът е 127 за 127 уникални символа и езикови знаци.
Въпреки че JAVA идва с функция, наречена "ИНТЕРНАЦИОНАЛИЗАЦИЯ", това означава, че всички Четени от човека знаци (включително Регионални символи) също се добавят в нея, и обхватът също се увеличава, така че се изисква повече памет, системата за обединяване на всички тези символи е "Стандартна Unicode система" и така че това Обединяване изисква този допълнителен байт в JAVA.
Първият байт остава такъв, какъвто е, а ASCII символите са в диапазон от 127, както в C, C++, но след това към тях се добавят унифицирани символи.
Така че 16 бита за char в JAVA и 8 бита за char в C.
Типът данни char е единичен 16-битов Unicode символ. Има минимална стойност ' ' (или 0) и максимална стойност '' (или 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
Java се използва за интернационализация, така че работи на различни езици и трябва да има повече от един байт, затова отнема 2 байта пространство в char. например китайският език не може да пренесе един байт char.
Както знаем, c поддържа ASCII, където като java поддържа Unicode, който съдържа 3 неща, които са 1-ASCII 2-разширен ASCII 3-знак на местен език ASCII е подмножество на unicode.ASCII поддържа само английски език, където като Unicode поддържа език на мултинационалните компании.в противен случай java символът е кодиран в рамките на UTF-16, който използва 2 байта. поради цялата причина и тъй като Unicode е разширената версия на ASCII, така че използва 16 бита вместо 8 бита.