Initialiser un long en Java


214

Types de données primitifs - oracle doc indique que l'étendue de longJava est -9,223,372,036,854,775,808de 9,223,372,036,854,775,807. Mais quand je fais quelque chose comme ça dans mon éclipse

long i = 12345678910;

il me montre une The literal 12345678910 of type int is out of rangeerreur " ".

Il y a 2 questions.

1) Comment initialiser le longavec la valeur 12345678910?

2) Tous les littéraux numériques sont-ils par défaut de type int?


Et que diriez-vous d'initialiser un Long?
Wolfgang Fahl

1
@WolfgangFahl Mêmes règles pour Long- en raison de la boxe automatique, vous pouvez utiliser Long i = 12345678910Lou utiliser Long i = Long.valueOf(12345678910L)dans les cas où vous ne pouvez pas utiliser la boxe automatique.
Dorian Gray

Réponses:


423
  1. Vous devez ajouter L: long i = 12345678910L;.
  2. Oui.

BTW: il n'est pas nécessaire que ce soit un L majuscule, mais il est 1souvent confondu avec des minuscules :).


3
Juste au cas où quelqu'un se 0x200000000L
poserait la

@Victor Long.valueOf (long) renvoie un Long, pas un long primitif. La solution de MByD évite de s'appuyer sur l'auto-boxing.
gouessej

@ user149408 Peut-être voulez-vous dire 0x20000000L?
Pluton

2
@Pluto 0x20000000Lfonctionnerait mais peut toujours être représenté par int(un entier 32 bits), donc 0x20000000fonctionnerait tout aussi bien. 0x200000000Lbrise cette frontière, rendant la fuite Lnécessaire.
user149408

59
  1. Vous devez ajouter le Lcaractère à la fin du nombre pour que Java le reconnaisse comme long.

    long i = 12345678910L;
  2. Oui.

Voir Primitive Data Types qui dit "Un littéral entier est de type long s'il se termine par la lettre L ou l; sinon il est de type int."


39

Vous devez ajouter des majuscules Là la fin comme ça

long i = 12345678910L;

Il en va de même pour le flotteur avec 3.0f

Qui devrait répondre à vos deux questions


15

Pour initialiser longtemps, vous devez ajouter "L" à la fin.
Il peut être en majuscules ou en minuscules.

Toutes les valeurs numériques sont par défaut int. Même lorsque vous effectuez une opération byteavec un entier, byteest d'abord promu intet ensuite toutes les opérations sont effectuées.

Essaye ça

byte a = 1; // declare a byte
a = a*2; //  you will get error here

Vous obtenez une erreur car 2est par défaut int.
Par conséquent, vous essayez de vous multiplier byteavec int. Par conséquent, le résultat est converti en type intauquel ne peut pas être attribué à nouveau byte.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.