J'ai lu dans la spécification JVM selon laquelle les octets de types de données, courts et caractères sont traités en interne comme INT. Alors pourquoi avoir ces types de données si nous n'avons pas bénéficié de leur petite taille? P>
3 Réponses :
En partie, c'est pour la compatibilité avec C / C ++ et, en partie, il est de conserver la mémoire - en interne, un court-circuit est stocké em> comme court, mais il est traité em> en tant que entier. Un nouveau court court [10] code> prend la moitié de la mémoire que le neuf int [10] code> p>
+1: tableaux, surtout. Sur la pile ou dans une variable locale, un octet code> prend tout aussi de pièce qu'un int code> (champs Le JVM pourrait optimiser cela, s'il le souhaitait).
C'est pour la gestation de la mémoire. Chaque variable a un espace mémoire. La taille de l'espace dépend du type de la variable que vous utilisez. p>
Sinon, le type de type est très utile lorsque vous manipulez la chaîne. En effet, vous pouvez avoir un caractère de la chaîne à l'aide de String.Charat (Index) P>
Les réponses données sont très bonnes, mais je vais souligner une autre utilisation possible. Vous pouvez effectuer une vérification du temps de compilation des types de données. Par exemple, vous pouvez avoir un âge (en années) d'une personne en tant qu'yte d'octet et vous pouvez compiler un temps de contrôle pour vous assurer qu'une valeur plus importante stockée dans un Int ou court est utilisée pour ce champ. P>
Principalement pour les tableaux. Un tableau de shorts utilise toujours la moitié de la mémoire qu'une gamme d'entiers de la même taille.
Je suis sûr qu'il y a beaucoup d'algorithmes en fonction des gammes de valeur de types intégrés différents par, par exemple, en attendant une valeur intégrale de débordement à certains points.
Outre des questions de mémoire, ces types de base numériques sont souvent utiles lors de la manipulation de protocoles de communication ou de code qui interagissent avec des structures compactes définies en dehors du code Java. Bien sûr, si les concepteurs de la langue se souciaient vraiment de ce cas d'utilisation, ils auraient ajouté des types non signés dans la langue afin que nous n'ayons pas besoin de terribles astuces telles que
B & 0XFF Code> ...
Surtout
octet code> est de la plus haute importance! À peu près, chaque flux de données (fichiers, flux de réseau, ...) est représenté par des octets dans toutes les principales architectures modernes (et à peu près toutes les RFC!) Si Java n'avait aucun moyen facile de représenter cela, il serait assez difficile d'interagir. Bien sûr, vous pourrait i> émuler un
octet [] code> à l'aide d'un
int [] code>, mais le résultat serait soit une mémoire très inefficace ou terriblement compliquée.
L'utilisation des types de données plus petits pour les variables prendra également moins d'espace dans un objet instancié en fonction des limites d'emballage d'octets et des frais généraux d'objet. Sur mesure correctement dans un JVM bien connu, vous pouvez enregistrer un espace considérable sur le tas, même avec des collections plus complexes que d'une matrice. Un 100 millions d'enregistrements de la mémoire qui prennent jusqu'à 40 octets, chacun peut chacun la moitié de vos coûts d'hébergement en nuage vs les mêmes 100 millions d'enregistrements suivent 160 octets chacun. Et oui, vous aurez peut-être très bien besoin de tous les enregistrements en mémoire en même temps. :-)