Потому что результат равен 63 936 000 000, что больше, чем вы можете сохранить в целочисленном Java (что по умолчанию таково, потому что ни один из них не имеет предваряющего L).Целое число может хранить только 4 байта (32 бита), и для этого числа потребуется 36 бит.Затем он переполняется, по существу, используя только последние (первые?) 32 бита результата.Поскольку первый (последний? Зависит от того, как вы на него смотрите) этих битов определяет, будет ли число подписано или нет, когда число снова фактически рассматривается как целое число, оно отображается как отрицательное.
Этоособенно полезен для вычисления хэшей, поскольку единственная логическая альтернатива, которую я вижу, состоит в том, чтобы сделать все числа сверх максимального значения равными максимальному значению, что, я думаю, мы можем согласиться, является плохим выбором.
Если вы сделали этоSystem.out.println(740L * (24 * 60 * 60 * 1000));
он должен использовать long, который может хранить намного большие числа.
Вы заметите, что у меня есть вопросительные знаки через это - байты - это байты, а биты - биты.Что действительно важно, так это то, как вы их интерпретируете.В сообществе разработчиков программного обеспечения существует спор о том, что на самом деле означает быть первой цифрой, битом или байтом.Рассмотрим «1234» как число.1 первая цифра?Большинство простых людей согласятся с этим, потому что это написано первым, когда мы смотрим на это.Но другие будут считать 4 первой цифрой, потому что это удобно делать в целях расчета.(Подумайте над тем, чтобы добавить - куда вы добавляете первым? Разве это не первое число?)
Так вот почему я, кажется, нерешительный, как я говорю первый / последний - я просто хочу прояснить, что происходитна.