Java - int/long, float, double,
Je comprends que "2.5" est automatiquement un double, et d'en faire un float, j'ai besoin de faire "2.5 F" (ou devrait le F minuscule?), et que je devrais utiliser un flotteur, de dire, si j'avais une constante qui n'a jamais besoin de 2 décimales espaces (comme "de 0,08 F" pour la TVP de l'Ontario de l'impôt), mais je ne suis pas sûr de savoir si "12" est un int ou un long, mais je sais que "12L" est un long, mais "long l = 12" et "long l = 12L" semblent compiler à la même chose, et j'utilise de long si je veux le maximum de non-précision en virgule flottante, et int si je sais que je ne suis pas le besoin à l'extérieur int limites.
Veuillez me corriger si il y a là quelque chose qui n'est pas droit, et de répondre à la quesions j'ai.
OriginalL'auteur mk12 | 2009-08-31
Vous devez vous connecter pour publier un commentaire.
12 comme une constante dans java est un int.
La raison long l = 12 compile, c'est qu'il est automatiquement élargi à un long.
EDIT: Concernant votre commentaire, il n'y a rien de mal avec coupure automatique de l'élargissement, quel que soit le rend votre code plus clair, mais juste être conscient de ce qui se passe quand vous faire des maths sur les primitives. Par exemple:
Le long aura une valeur très différente si vous n'avez pas explicitement mis que le premier numéro d'une longue parce que Java va le traiter comme math entier, et de provoquer un dépassement de capacité.
Il n'y a rien de mal avec l'automatique élargissement, quel que soit le rend votre code plus clair.
OriginalL'auteur Yishai
Il ne fait pas de différence si vous utilisez des majuscules ou en minuscules lors de la déclaration de votre
float
s .Si vous utilisez ces champs pour la monnaie, vous devriez envisager d'utiliser
BigDecimal
à la place. Voir cette explication et de ses liens de Soleil pour plus de détails.De travail dans l'industrie financière, logiciel d'écriture pour les institutions financières, je suis d'accord. En fait, j'essaie de l'éviter les doublons dans la mesure du possible, même dans des endroits où la précision n'est pas important - sauf si j'ai besoin de la vitesse, je préfère avoir trop de précision que pas assez 🙂
J'ai été en utilisant distinct aspire à représenter les monnaies, mais apparemment, j'aurais été en utilisant BigDecimal, de toute façon.
OriginalL'auteur akf
Première, 12 est un
int
. Puisque vous ne précisez pas le type, le compilateur supposeint
, comme il le supposedouble
lorsque vous ne spécifiez pas un type pour 2.5.La cession
compile très bien parce qu'il n'y a pas de perte de précision lorsque le compilateur implicitement upcasts le littéral
int
valeur de 12 pour unlong
.J'essaie toujours d'utiliser la majuscule spécificateurs de type 2.5 F et 12L, tout simplement parce qu'ils sont plus faciles à lire. 1 et l se ressemblent beaucoup dans la police à chasse fixe que je préfère.
OriginalL'auteur Bill the Lizard
Note que bien que
int
littéraux sera automatique, élargie àlong
lors de l'attribution d'unlong
variable, vous aurez besoin d'utiliser un explicitelong
littérale quand exprimant une valeur qui est supérieure àInteger.MAX_VALUE
(2147483647) ou moins deInteger.MIN_VALUE
(-2147483648):OriginalL'auteur Joachim Sauer