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.
Ajoutez L
à la fin du numéro:
long bytes = 4294967296L;
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.
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.
essayez long bytes = 4294967296L;
pour indiquer au compilateur que vous utilisez un long
.
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)
Soufiane a raison. Voici un document qui montre comment déclarer des littéraux des différents types de nombres en Java: