53 votes

Pourquoi n'y a-t-il pas de littéraux courts ou octets en Java?

Je peux créer un littéral de long en ajoutant un L à la valeur; pourquoi ne puis-je pas créer un littéral court ou byte en quelque façon similaire? Pourquoi dois-je utiliser un int littérale avec un casting?

Et si la réponse est "Parce qu'il n'y a pas de court littérale en C", alors pourquoi il n'y a pas de court-littéraux en C?

Ce n'est pas réellement une incidence sur ma vie de manière significative; il est assez facile d'écrire (court) 0 au lieu de 0 ou de quelque chose. Mais l'incohérence me rend curieux; c'est une de ces choses qui vous dérange lorsque vous êtes jusqu'à tard dans la nuit. Quelqu'un à un certain point fait d'une décision de conception afin de rendre possible l'entrée des littéraux pour certains types primitifs, mais pas pour tous. Pourquoi?

15voto

Julien Oster Points 1506

En C, int au moins est censé avoir le "naturel" mot de la taille de la CPU et de l' long était probablement destiné à être le "plus naturel" taille de mot (pas sûr que dans cette dernière partie, mais il pourrait aussi expliquer pourquoi int et long ont la même taille sur l'architecture x86).

Maintenant, ma conjecture est la suivante: pour int et long, il y a une représentation naturelle qui s'adapte exactement dans une machine à registres. Sur la plupart des Processeurs cependant, les plus petits types byte et short devrait être rembourré pour un int de toute façon avant d'être utilisé. Si c'est le cas, vous pouvez aussi bien avoir un plâtre.

8voto

Jon Skeet Points 692016

Je soupçonne que c'est un cas de "ne pas ajouter quoi que ce soit à la langue, à moins qu'il apporte vraiment de la valeur" - et il a été vu que l'ajout de suffisamment peu de valeur pour ne pas être en vaut la peine. Comme vous l'avez dit, il est facile d'aller faire un tour, et franchement, il est rarement nécessaire de toute façon (uniquement pour la désambiguïsation).

Le même est vrai en C#, et je n'ai jamais particulièrement raté dans les deux langues. Ce que je fais manquer en Java est un unsigned byte type :)

4voto

Joachim Sauer Points 133411

Une autre raison pourrait être que la JVM ne sais pas à propos de court et de l'octet. Tous les calculs et de stockage est fait avec ints, des longs, des flotteurs et des doubles à l'intérieur de la JVM.

2voto

Il y a plusieurs choses à considérer.

1) Comme indiqué au-dessus de la JVM n'a aucune notion d'octets ou de court-types. En général, ces types ne sont pas utilisés dans le calcul au niveau de la JVM; on peut donc penser qu'il y aurait moins de l'utilisation de ces littéraux.

2) Pour l'initialisation de l'octet et court variables, si l'int expression est constante dans l'intervalle autorisé du type qu'il est implicitement convertie dans le type de cible.

3) On peut toujours lancer le littéral, ex (court)10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X