web-dev-qa-db-fra.com

Pourquoi la primitive Java utilise-t-elle 2 octets de mémoire?

Y a-t-il une raison pour laquelle le type de données primitif de caractères Java est de 2 octets, contrairement à C, qui est de 1 octet?

Merci

28
realnumber

Lors de la conception initiale de Java, il était prévu que tout caractère Unicode tiendrait sur 2 octets (16 bits). char et Character ont donc été conçus en conséquence. En fait, un caractère Unicode peut maintenant nécessiter jusqu'à 4 octets. Ainsi, UTF-16, le codage Java interne, nécessite des caractères supplémentaires et 2 unités de code. Les caractères du plan multilingue de base (les plus courants) utilisent toujours 1. Une variable Java char est utilisée pour chaque unité de code. Cet article de Sun l'explique bien.

46
Matthew Flaschen

char en Java est codé en UTF-16, ce qui nécessite un minimum de 16 bits de stockage pour chaque caractère.

19
Vijay Mathew

En Java, un caractère est codé dans UTF-16 qui utilise 2 octets, alors qu'une chaîne C normale est plus ou moins juste un tas d'octets. Lors de la conception de C, l'utilisation de ASCII (qui ne couvre que le jeu de caractères anglais) était jugée suffisante, alors que les concepteurs Java prenaient déjà en compte l'internationalisation. Si vous souhaitez utiliser Unicode avec des chaînes C, le codage UTF-8 est la méthode préférée car il comporte ASCII comme sous-ensemble et n'utilise pas l'octet 0 (contrairement à UTF-16), qui est: utilisé comme marqueur de fin de chaîne en C. Un tel marqueur de fin de chaîne n'est pas nécessaire en Java, car une chaîne est un type complexe ici, de longueur explicite.

9
DarkDust

Dans les langages précédents, on utilise les notations CASCII.. .. Et la plage est 127, pour 127 symboles uniques et caractères de langage .

Alors que Java est livré avec une fonctionnalité appelée "INTERNATIONALIZATION" , c'est tout le lisible par l'homme caractères (y compris symboles régionaux ) sont également ajoutés, et la plage est également augmentée, donc plus la mémoire requise, le système pour unifier tous ces symboles est "Système standard Unicode" , et de sorte que this Unification nécessite cet octet supplémentaire en Java.

Le premier octet reste tel quel et les caractères ASCII sont définis sur 127, comme en C, C++ mais les caractères unifiés sont ensuite ajoutés.

Donc 16 bits pour char en Java et 8 bits pour char en C.

4
tilak

Tutoriels Java ™ :

Le type de données char est un seul caractère Unicode 16 bits. Sa valeur minimale est '\ u0000' (ou 0) et sa valeur maximale est '\ uffff' (ou 65 535 inclus).

0
Zeyu