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?

aamadmi
la source
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 :).

MByD
la source
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."

Jack Edmonds
la source
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

Amir Raminfar
la source
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.

Suraj Dubey
la source