web-dev-qa-db-fra.com

Pourquoi ne puis-je pas attribuer une valeur «longue» de 4 milliards?

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

Ceci est mon code. Il en résulte le message d'erreur suivant: "Le littéral 4294967296 de type int est hors limites".

long bytes = 4294967296;

J'ai besoin de cette valeur pour créer un filtre de fichiers qui filtre les fichiers plus grands que 4294967296 octets (4 Go). L'inverse fonctionne sans problème (long size = file.length()) avec chaque taille de fichier, c'est pourquoi je ne peux pas comprendre pourquoi ma déclaration ne fonctionne pas.

34
Peter

Ajoutez L à la fin du numéro:

long bytes = 4294967296L;
74
icktoofay

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

Long.MAX_VALUE

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

28
Bozho

long les littéraux sont suivis de la lettre L ou l (voir: JLS 3.10.1 ). Les majuscules sont meilleures car elles sont plus lisibles, les minuscules l ressemblent 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 de 32.

19
polygenelubricants

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

18
Soufiane Hassou

La réponse à votre question "pourquoi" est parce que 4294967296 n'est pas longue. Par défaut Java regardez n'importe quel nombre comme de type int ou double (selon qu'il a ou n'a pas de point). Et ensuite seulement convertissez ce nombre en type spécifié (long dans votre cas) Ainsi, l'erreur que vous voyez signifie que votre nombre est plus grand que la valeur maximale pour int. L'ajout d'un attribut littéral à la fin permet au compilateur de savoir quel type utiliser (b - octets, s - court, l - long, f - float)

4
user1660016

Soufiane a raison. Voici un document qui montre comment déclarer des littéraux des différents types de nombres en Java:

http://www.janeg.ca/scjp/lang/literals.html

2
Doug Porter