La taille des caractères en Java vs C
Pourquoi un personnage en Java prendre deux fois plus d'espace pour stocker un caractère en C?
On pourrait compteur de poser la question, comment est-il possible que vous en savez assez qu'ils sont différents de ne pas aller à l'étape suivante et de comprendre pourquoi?
Java est deux fois plus puissant que le C++, et le pouvoir doit venir de quelque part...
Mais il peut avoir 256x autant de caractères. 😉
Java est deux fois plus puissant que le C++, et le pouvoir doit venir de quelque part...
Mais il peut avoir 256x autant de caractères. 😉
OriginalL'auteur ion3023 | 2012-02-19
Vous devez vous connecter pour publier un commentaire.
En Java personnages sont de 16 bits et C, ils sont 8-bit.
Une question plus générale est: pourquoi est-ce donc?
Trouver pourquoi vous avez besoin de regarder histoire et arriver à des conclusions/opinions sur le sujet.
Quand C a été développé aux etats-unis, ASCII était assez standard, et vous ne vraiment besoin de 7 bits, mais avec 8 vous pourriez traiter certains des caractères non-ASCII. Il peut sembler plus que suffisant. Beaucoup de texte basé sur des protocoles comme SMTP (e-mail), XML et de FIXER, toujours utiliser uniquement des caractères ASCII. E-mail et XML encoder les caractères non ASCII. Les fichiers binaires, les prises et les flux sont encore seul octet de 8 bits natif.
BTW: C peut soutenir plus de caractères, mais qui n'est pas évident
char
Lors de Java a été mis au point 16 bits semblait assez à l'appui de la plupart des langues. Depuis unicode a été étendu à 65535 caractères ci-dessus et Java a eu pour ajouter le support pour codepoints qui est de l'UTF-16 caractères et peut être un ou deux caractères 16 bits.
Faire une
byte
un octet etchar
un entier non signé de 16 bits de la valeur de sens à l'époque.BTW: Si votre JVM prend en charge
-XX:+UseCompressedStrings
il peut utiliser octets au lieu de caractères pour les Chaînes qui n'utilisent que des caractères 8 bits.Voir plus d' @ <stackoverflow.com/questions/2533097/java-unicode-encoding>
Pour être précis, en C, ils sont au moins 8-bits.
Je voulais avoir une réponse avant que quelqu'un a fermé la question. 😉
OriginalL'auteur Peter Lawrey
Parce que Java utilise Unicode, C utilise généralement ASCII par défaut.
Il existe différentes saveurs de codage Unicode, mais Java utilise l'UTF-16, qui utilise un ou deux de 16 bits unités de code par caractère. ASCII utilise toujours un octet par caractère.
Désolé, "au moins" deux octets par caractère.
OriginalL'auteur DNA
OriginalL'auteur Dmytro Chyzhykov
Java est un langage moderne, donc il supporte Unicode par défaut, comme beaucoup de nouvelles langues aujourd'hui (comme le C#). En revanche C est un "ancien" de la langue à partir de l'ère de l'ASCII 7 bits, donc il utiliser 8 bits char par défaut. Lors du passage à l'Unicode fois, pour ne pas faire de vieux code, les pauses, ils décident d'utiliser un autre type de caractère qui est wchar_t
OriginalL'auteur phuclv
Java char est un UTF-16 codé point de code unicode, tandis que le C utilise le codage ascii dans la plupart des cas.
Aussi le Java char n'est pas "un char unicode".
À droite, c'est un code UTF-16 de l'unité.
J'ai pensé que je voudrais simplifier la formulation, mais vous avez raison. "Un char unicode', c'est tout simplement faux. Modifié la réponse.
OriginalL'auteur Pico