Il semble que lorsque vous tapez un nombre en Java, le compilateur le lit automatiquement comme un entier, c'est pourquoi lorsque vous tapez (long) 6000000000
(pas dans la plage d'entiers), il se plaindra que ce 6000000000
n'est pas un entier. Pour corriger cela, j'ai dû préciser 6000000000L
. Je viens d'apprendre cette spécification.
Existe-t-il d'autres spécifications numériques comme pour court, octet, flottant, double? Il semble que ce serait bien d'avoir parce que (je suppose) si vous pouviez spécifier le nombre que vous saisissez est un court alors java n'aurait pas à le lancer - c'est une hypothèse, corrigez-moi si je me trompe . Normalement, je chercherais moi-même cette question, mais je ne sais pas comment s'appelle même ce type de spécification de nombre.
1
avecl
et0
avecO
(et ainsi de suite), votre priorité est de définir la police correctement (si vous le pouvez ), puis assurez-vous de ne pas manquer la touche Maj.long _lo = 30;
et30L
cela ne signifie-t-il pas que ma variable sera convertie en float ? Ou dans le cas_lo = _lo + 2.77
où_lo
cela sera jeté dans le flotteur bien qu'il ait été déclaré long30
est unint
qui est automatiquement converti via une conversion élargie en un fichierlong
. Dans le second cas, votre déclaration est illégale. Vous auriez à lancer explicitement le côté droit à long, par exemple_lo = (long) (_lo + 2.77)
l
et1
(0
etO
resp.) Sont assez similaires.J'espère qu'une légère tangente ne vous dérangera pas, mais j'ai pensé que cela pourrait vous intéresser de savoir qu'en plus
F
(pour float),D
(pour double) etL
(pour longtemps), une proposition a été faite d'ajouter des suffixes pourbyte
etshort
-Y
etS
respectivement . Cela éliminerait le besoin de transtyper en octets lors de l'utilisation d'une syntaxe littérale pour des tableaux d'octets (ou courts). Citant l'exemple de la proposition:Joe Darcy supervise Project Coin pour Java 7, et son blog a été un moyen facile de suivre ces propositions.
la source
0b
préfixe pour les littéraux binaires. Cri.Par défaut, tout type de données primitif intégral (byte, short, int, long) sera traité comme type int par le compilateur java. Pour byte et short , tant que la valeur qui leur est assignée est dans leur plage, il n'y a aucun problème et aucun suffixe requis. Si la valeur attribuée à byte et short dépasse leur plage, une conversion de type explicite est requise.
Ex:
pour surmonter cette coulée de type effectuer.
En cas de type de données long, il peut accepter la valeur entière sans aucun problème. Supposons que nous attribuions comme
dans ce cas, aucun suffixe comme L / l n'est requis. Par défaut, la valeur 2147483647 est considérée par le compilateur java de type int. Le cast de type interne est effectué par le compilateur et int est automatiquement promu en type Long.
Ici, nous devons mettre le suffixe L pour traiter le littéral 2147483648 comme un type long par le compilateur java.
donc finalement
la source
Ce sont des littéraux et sont décrits dans la section 3.10 de la spécification du langage Java.
la source
Étant donné que l'analyse des littéraux se produit au moment de la compilation, cela n'a absolument aucune importance en termes de performances. La seule raison d'avoir
short
etbyte
suffixes serait bien est qu'il conduit à un code plus compact.la source
Pour comprendre pourquoi il est nécessaire de faire la distinction entre
int
etlong
littéraux, considérez:contre
Maintenant, comme vous vous en doutez, les deux fragments de code donnent la même valeur à variable
l
. Sans pouvoir distinguerint
etlong
littéralement, quelle est l'interprétation de-1 >>> 1
?ou
Donc, même si le nombre est dans la plage commune, nous devons spécifier le type. Si la valeur par défaut changeait avec la magnitude du littéral, alors il y aurait un changement étrange dans les interprétations des expressions simplement en changeant les chiffres.
Cela ne se produit pas
byte
,short
etchar
parce qu'ils sont toujours promu avant d' effectuer des opérations arithmétiques et au niveau du bit. On peut soutenir qu'il devrait s'agir de suffixes de type entier à utiliser, par exemple, dans des expressions d'initialisation de tableau, mais ce n'est pas le cas.float
utilise le suffixef
etdouble
d
. D'autres littéraux ont des types non ambigus, avec un type spécial pournull
.la source
Integer.MAX_VALUE
, s'il n'y avait pas moyen de distinguer entreint
etlong
littéraux il serait ambigu. / Je ne me souviens pas de cette question, mais j'ai quand même clarifié ma réponse.