106 votes

Le littéral de xxxxx int est hors de portée

Je suis un peu perplexe car je suis en train de travailler avec les types de données à l'heure actuelle en Java, et si j'ai bien compris le type long accepte une valeur entre les gammes de: -9,223,372,036,854 à +9,223,372,036,854,775,807. Maintenant, comme vous pouvez le voir ci-dessous j'ai créer une variable nommée testLong, bien que lorsque j'insère 9223372036854775807 comme la valeur, je reçois un message d'erreur indiquant:

"Le sens littéral de type int 9223372036854775807 est hors de portée."

Je ne sais pas pourquoi il parle de l' long type de données comme un int :S

N'importe qui ont des idées?

Le Code Ci-Dessous:

char testChar = 01;
byte testByte = -128;
int testInt = -2147483648;
short testShort = -32768;
long testLong = 9223372036854775807;
float testFoat;
double testDouble = 4.940656458412;
boolean testBool = true;

221voto

Lukas Eder Points 48046

Ajouter un capital L à la fin:

 long value = 9223372036854775807L;
 

Sinon, le compilateur essaiera d’analyser le littéral sous forme de int , d’où le message d’erreur

59voto

Joachim Sauer Points 133411

Je ne sais pas pourquoi il est fait référence au type de données long comme un int

Il n'est pas. Vous devez apprendre à faire confiance aux messages compilateur (surtout quand ils sont de sane, les compilateurs modernes et pas les anciens compilateurs C/C++). Alors que la langue qu'ils parlent peut-être dur à déchiffrer parfois, ils ne sont généralement pas de vous mentir.

Regardons de nouveau:

La traduction littérale de l'int 9223372036854775807 est hors de portée.

Notez qu'il n'est pas de mentionner votre variable testLong ou le type long n'importe où, donc c'est pas sur l'initialisation. Le problème semble se produire à un autre moment.

Maintenant permet d'étudier certaines parties du message:

  • int nous dit qu'il veut traiter quelque chose en int de la valeur (ce qui n'est pas ce que tu voulais!)
  • "hors de portée" est assez clair: quelque chose n'est pas dans la fourchette prévue (probablement celle de int)
  • "Le littéral": c'est intéressant: qu'est ce qu'un littéral?

Je vais quitter le douillet liste de parler de littéraux pour un moment: les littéraux sont des endroits où vous avez un peu de valeur dans votre code. Il y a String littéraux, int littéraux, class littéraux et ainsi de suite. Chaque fois que vous indiquez une valeur explicitement dans votre code, c'est un littéral.

Il n'est donc pas réellement lancinante vous au sujet de la déclaration de la variable, mais le nombre, la valeur est ce qu'il est tenace.

Vous pouvez facilement vérifier cela en utilisant le même littéral dans un contexte où une long et int sont également acceptables:

System.out.println(9223372036854775807);

PrintStream.println peut prendre soit une int ou un long (ou n'importe quoi d'autre). De sorte que le code devrait être bon, non?

Pas de. Eh bien, peut-être qu'il devrait être, mais selon les règles, c' est pas bien.

Le problème est que "quelques chiffres" est défini à l' int littérale et, par conséquent, doit être dans la gamme définie par int.

Si vous voulez écrire un long littéral, alors vous devez faire explicite, par l'ajout de la L (ou moins de cas l, mais je extrêmement vous suggère d'utiliser toujours la majuscule variante, parce qu'il est beaucoup plus facile à lire et plus difficile d'erreur pour un 1).

Notez qu'un problème similaire se produit avec float (postfix F/f) et double (postfix D/d).

Remarque: vous réaliserez qu'il n'y a aucun byte ou short littéraux et vous pouvez toujours affecter des valeurs (habituellement int littéraux) byte et short variables: c'est possible grâce à des règles spéciales dans le§ 5.2 au sujet de l'Affectation Converson: ils permettent d'affectation des expressions constantes d'un plus grand type d' byte, short, char ou int si les valeurs sont à l'intérieur de la types de gamme.

24voto

jontro Points 3423

Essayez de faire 9223372036854775807L

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