34 votes

Pourquoi ne puis-je pas attribuer à un "long" une valeur de 4 milliards ?

J'essaie de déclarer une valeur longue en Java, ce qui ne fonctionne malheureusement pas.

Voici mon code. Il aboutit au message d'erreur suivant : "Le littéral 4294967296 du type int est hors de portée".

long bytes = 4294967296;

J'ai besoin de cette valeur pour créer un filtre de fichiers qui élimine les fichiers dont la taille est supérieure à 4294967296 octets (4 Go). L'autre façon de procéder fonctionne sans problème ( long size = file.length() ) avec chaque taille de fichier, c'est pourquoi je n'arrive pas à comprendre pourquoi ma déclaration ne fonctionne pas.

74voto

icktoofay Points 60218

Ajouter L à la fin du numéro :

long bytes = 4294967296L;

28voto

Bozho Points 273663

Pour répondre au titre de votre question, la valeur maximale d'une longue peut être obtenue via la constante :

Long.MAX_VALUE

Pour résoudre votre problème - ajoutez le l ( L ) littéral après le numéro.

19voto

polygenelubricants Points 136838

long Les littéraux sont suivis de la lettre L o l (voir : JLS 3.10.1 ). Les majuscules sont meilleures parce qu'elles sont plus lisibles, les minuscules l ressemble trop à 1 .

Pour votre numéro particulier, il est probablement plus facile d'écrire :

 long bytes = (1L << 32);

De cette façon, quelqu'un qui lit le code peut rapidement dire que bytes est exactement 2 à la puissance 32.

18voto

Soufiane Hassou Points 9789

Essayez long bytes = 4294967296L; pour indiquer au compilateur que vous utilisez un fichier long .

4voto

user1660016 Points 41

La réponse à votre question "pourquoi" est que 4294967296 n'est pas un long. Par défaut, Java considère tout nombre comme étant de type int ou double (selon qu'il possède ou non un point). Ce n'est qu'ensuite que ce nombre est converti en un type spécifique (long dans votre cas). Donc l'erreur que vous voyez signifie que votre nombre est plus grand que la valeur maximale pour int. L'ajout de l'attribut literal à la fin permet au compilateur de savoir quel type utiliser (b - bytes, s - short, l - long, f - float).

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