Что продолжает класс Даты Java? Действительно ли это - известная ошибка?

У меня не так много всего, что можно добавить к регулярному выражению, которое заботится об именах, потому что здесь уже есть несколько хороших предложений, но если вы хотите получить несколько ресурсов для получения дополнительной информации о регулярных выражениях, вы должны проверить:

5
задан Yuval 11 June 2009 в 08:09
поделиться

2 ответа

25 * 24 * 60 * 60 * 1000 = 2160000000 = 0x80BEFC00

вы вычисляете целочисленное значение и получаете переполнение. если было

25 * 24 * 60 * 60 * 1000 л

, все должно быть в порядке.

27
ответ дан 18 December 2019 в 05:36
поделиться

Это не ошибка в классе Date, это случай целочисленного переполнения. int в Java может быть только между -2 31 и 2 31 - 1, но 25 × 24 × 60 × 60 × 1000 больше 2 31 - 1, поэтому он переполняется.

Если вы запустите

System.out.println(24*24*60*60*1000);
System.out.println(25*24*60*60*1000);

, вы получите результат

2073600000
-2134967296

Если вы укажете одно из чисел, которые вы умножаете вместе, как длинное на добавив к нему суффикс L , продукт также будет иметь длину . long значения могут увеличиваться до 2 63 - 1, поэтому вы не получите переполнения, если не добавите лот дней к вашей Дате. с. Например,

System.out.println(25L*24*60*60*1000);

дает вам

2160000000
5
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: