Что это значит для% 2147483647L в эпоху времени? - PullRequest
0 голосов
/ 24 сентября 2018

Я только что натолкнулся на проблему с генерацией идентификатора для уведомлений в Android.

Я прошёл через несколько уведомлений-обработки-sdk, и они используют этот код для генерации идентификатора уведомления:

private int generateTimestampId() {
    return (int)(new Date().getTime() % 2147483647L);
}

Это, вероятно, хорошее решение, , но я не могу понять, что означает % 2147483647L в контексте времени эпохи .

(обратите внимание: new Date().getTime() возвращает числомиллисекунды с 1 января 1970 года, 00:00:00 по Гринвичу)

1 Ответ

0 голосов
/ 24 сентября 2018

Это может быть сделано для предотвращения отрицательных значений, которые произойдут, когда long сузится до int.Рассмотрим следующий код:

long value = 1L + Integer.MAX_VALUE; // anything past max integer
int i1 = (int) value; // -2147483648
int i2 = (int) (value % 2147483647L); // 1

С % 2147483647L код гарантирует, что число всегда будет меньше, чем Integer.MAX_VALUE, то есть 2147483647, прежде чем оно будет сужено до int.

Это более или менее имеет смысл в контексте сгенерированных идентификаторов, мы редко используем отрицательные числа для этого варианта использования.

...