Подтвердить что ты не робот

Почему я не могу присвоить "длинную" сумму в 4 миллиарда?

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

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

long bytes = 4294967296;

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

4b9b3361

Ответ 1

Добавьте L в конец номера:

long bytes = 4294967296L;

Ответ 2

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

Long.MAX_VALUE

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

Ответ 3

За буквами

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

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

 long bytes = (1L << 32);

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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