Почему я не могу присвоить 'long' значение 4 миллиарда? - PullRequest
34 голосов
/ 28 февраля 2010

Я пытаюсь объявить длинное значение в Java, которое, к сожалению, не работает.

Это мой код. Это приводит к следующему сообщению об ошибке: «Литерал 4294967296 типа int находится вне диапазона».

long bytes = 4294967296;

Мне нужно это значение для создания фильтра файлов, который отфильтровывает файлы, размер которых превышает 4294967296 байт (4 ГБ). Другой способ работает без проблем (long size = file.length()) с каждым размером файла, поэтому я не могу понять, почему мое объявление не работает.

Ответы [ 6 ]

74 голосов
/ 28 февраля 2010

Добавьте L в конец числа:

long bytes = 4294967296L;
28 голосов
/ 28 февраля 2010

Чтобы ответить на заголовок вашего вопроса, максимальное значение long можно получить через константу:

Long.MAX_VALUE

Чтобы решить вашу проблему - добавьте литерал l (L) после числа.

19 голосов
/ 28 февраля 2010

long за литералами следует буква L или l (см .: JLS 3.10.1 ). Прописные буквы лучше, потому что они более разборчивы, строчные буквы l слишком похожи на 1.

Для вашего конкретного номера, вероятно, проще написать:

 long bytes = (1L << 32);

Таким образом, тот, кто читает код, может быстро сказать, что bytes - это ровно 2 в степени 32.

18 голосов
/ 28 февраля 2010

попробуйте long bytes = 4294967296L;, чтобы указать компилятору, что вы используете long.

4 голосов
/ 20 июля 2013

Ответ на ваш вопрос «почему» из-за 4294967296 не долгий. По умолчанию Java выглядит по любому числу, как по типу int или double (в зависимости от того, имеет ли оно точку или нет). И только потом конвертировать это число в указанный тип (длинный в вашем случае). Таким образом, ошибка, которую вы видите, означает, что ваше число больше максимального значения для int. Добавление литерального атрибута в конце позволяет компилятору знать, какой тип использовать (b - байты, s - короткие, l - длинные, f - float)

2 голосов
/ 28 февраля 2010

Суфиана верна. Вот документ, который показывает, как объявлять литералы различных типов чисел в Java:

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

...