J'ai été surpris de constater que le code suivant sortira ce: p> Taille du personnage: 2 p>
taille de la chaîne: 1 p>
blockQuote> Je supposerais qu'une seule chaîne de caractères devrait reprendre les mêmes octets (ou plus) qu'un seul caractère. P> en particulier je me demande. P> Si j'ai un haricot Java avec plusieurs champs, comment sa taille augmentera en fonction de la nature des champs (caractère, chaîne, booléen, vecteur, etc.) Je suppose que tous les objets Java en ont certains (probablement minimal) empreinte, et que l'une des plus petites de ces empreintes de pas serait un seul caractère. Pour tester cette hypothèse de base, j'ai commencé avec le code ci-dessus - et les résultats des déclarations d'impression semblent contre-intuitive. P> Toute perspective dans la manière dont les magasins Java / Serialises Les caractères VS Strings par défaut seraient très utiles. p> p>
5 Réponses :
getBytes () code> sorties La chaîne code> avec le codage par défaut (le plus probable
iso-8859-1 code>) pendant que le caractère interne a toujours 2 octets. Java interne utilise toujours des tableaux de caractères avec un char de 2 octets, si vous voulez en savoir plus sur le codage, lisez le lien par Oded dans les commentaires de la question. P>
Pour référence, getbytes () code> ne vous dit pas la consommation de mémoire réelle de la chaîne code>.
Je ne pense pas que cette déclaration est correcte: "Java interne utilise toujours des tableaux de caractères avec un caractère de 2 octets." Vous pouvez voir ce lien: Javarevisited.blogspot. com.tr/2012/01/... pour moi, Java a utilisé UTF-8 comme codage par défaut dans le code.
@Koraytugay Vous mélangez probablement la représentation de la mémoire interne de Unicode à Java (Oui, chaque implémentation de charcuterie comme la chaîne utilise toujours 2 caractères d'octets au format UTF-16) et que les représentations internes d'importation ou d'exportation de Java (fichier, réseau) dans des codages d'octets spécifiques. Si vous croyez toujours que votre version Java (qui est ...?) Utilise en interne UTF-8, comment avez-vous prouver que? Au fait, le problème des getbytes () est que la fonction est très ancienne, elle était déjà là dans la version 1.1 lorsque UTF-8 n'était pas encore prise en charge, vous ne pouvez donc pas vraiment prédire qu'il utilise UTF-8.
La taille d'un caractère est le stockage nécessaire pour un char, ce qui est 16 bits. La longueur d'une chaîne (également la longueur de la matrice de caractère sous-jacente ou d'octets-array) est le nombre de caractères (ou octets), pas une taille de bit. P>
C'est pourquoi vous aviez fait à la division par 8 pour la taille, mais pas pour la longueur. La longueur doit être multipliée par deux. P>
Notez également que vous obtiendrez d'autres longueurs pour le tableau des octets si vous spécifiez un codage différent. Dans ce cas, une transformation en un codage à une taille unique ou variable a été réalisée lors de GetBytes (). P>
Voir: http://docs.oracle.com/javase/6/docs/api/java/lang/string.html#getbytes (java.nio.charset.charsset ) p>
Non, il a utilisé getbytes () code>, alors ce qu'il obtient est en fait le nombre d'octets (ce qui n'est pas surprenant aussi bien).
Oui, cette réponse est un peu hors sujet et mécharacterise la question ... Je suggère une mise à jour.
Je voudrais dire ce que je pense, corrigez-moi si je me trompe, mais vous trouvez la longueur de la chaîne qui est correctement montrée comme 1 que vous n'avez que 1 caractère dans la chaîne. La longueur montre la longueur non la taille. la longueur et la taille sont deux choses différentes. P>
Vérifiez ce Link .. Vous trouvez le nombre d'octets occupés dans le mauvais sens p>
Eh bien, vous avez que 1 caractère de charcuterie a la taille de 2 octets et que votre chaîne contient 1 caractère de 1 caractère, non de la taille d'un octet.
la chaîne code> de la chaîne code> En Java consiste en: P>
private final char value[]; private final int offset; private final int count; private int hash;
Cela n'a pas de sens, pouvez-vous essayer d'améliorer la grammaire ... etc.?
Je veux ajouter du code d'abord, puis un peu d'explication: et la sortie sera la suivante: p> Ce qui vous manque réellement, vous ne fournissez aucun paramètre à la méthode forte> getbytes forte>. Probablement, vous obtenez les octets de la représentation UTF-8 du personnage 'A'. P> Eh bien, mais pourquoi avons-nous eu 4 octets, lorsque nous avons demandé UTF-16? OK, Java utilise UTF-16 en interne, puis nous devrions avoir 2 octets à droite? P> Si vous examinez la sortie: P> feff061
La longueur d'une chaîne est le nombre de caractères qu'il contient. Un caractère peut être codé dans plus d'un octet.
La chaîne est très probablement codée UTF-8, de sorte que "A" ne prend qu'un octet.
Le minimum absolu Chaque développeur de logiciel absolument doit connaître de manière positive à propos de Unicode et des ensembles de caractères (aucune excuse!) < / a>
@Niklasb. Ou plutôt un format de type UTF-16 UTF-16 (UCS-2).