Ответ 1
Добавьте L
в конец номера:
long bytes = 4294967296L;
Я пытаюсь объявить длинную ценность в Java, которая, к сожалению, не работает.
Это мой код. В результате появляется следующее сообщение об ошибке: "Литерал 4294967296 типа int находится за пределами допустимого диапазона".
long bytes = 4294967296;
Мне нужно это значение, чтобы фильтр файлов отфильтровывал файлы размером более 4294967296 байт (4 ГБ). Другой способ работает без каких-либо проблем (long size = file.length()
) с каждым размером файла, поэтому я не могу понять, почему моя декларация не работает.
Добавьте L
в конец номера:
long bytes = 4294967296L;
Чтобы ответить на заголовок вопроса, максимальное значение long может быть получено через константу:
Long.MAX_VALUE
Чтобы решить вашу проблему, добавьте литерал l
(l
) после номера.
long
следует буква L
или L
(см. JLS 3.10.1). Верхний регистр лучше, потому что он более разборчивый, строчный L
выглядит слишком похоже на 1
.
Для вашего конкретного номера, вероятно, проще написать:
long bytes = (1L << 32);
Таким образом, кто-то, кто читает код, может быстро сказать, что bytes
составляет ровно 2 до 32.
попробуйте long bytes = 4294967296L;
указать компилятору, что вы используете long
.
Ответ на ваш вопрос "почему" из-за 4294967296 не длинный. По умолчанию java смотрит на любое число, как на int или double type (в зависимости от того, имеет ли он или не имеет точки). И только тогда преобразовать это число в указанный тип (длинный в вашем случае). Таким образом, ошибка, которую вы видите, означает, что ваш номер больше, чем максимальное значение fot int. Добавляя атрибут literal в конце, пусть компилятор знает, какой тип использовать (b - байты, s - короткий, l - long, f - float)
Суфиана верна. Вот документ, который показывает, как объявлять литералы различных типов чисел в Java: