Ответы выше, предполагающие, что повторяющиеся одинаковые значения не могут возникнуть, похоже, забывают о том, что Java.Random имеет длину периода 2 ^ 48. Из-за этого вполне возможно, что nextInt () сгенерирует точно такие же целые числа ДО того, как один прошел все значения в периоде ГСЧ. На самом деле 2 ^ 16 раз.
Кроме того, поскольку целые числа разделены на четыре, одни и те же байты могут (будут) появляться, даже если бы нам пришлось пройти через все целые числа. На самом деле, если бы это было так, каждое значение байта появилось бы 2 ^ 24 раза, прежде чем мы прошли все целочисленные значения. Однако я знаю, что первоначальный вопрос касался байтового массива, состоящего из восьми байтов. В этом случае мы получили бы тот же массив после 2 ^ 31 (2 ^ 47 для Java-случайного) вызовов nextByte (потому что нам нужно два целых числа).
Нам не нужно проходить через все целые числа, как я уже говорил.
Это, как говорится, если мы предполагаем равномерное распределение значений, возвращаемых nextInt (), то вероятность получения точно таких же целых чисел в серии из n выборок
приблизительно 1 - ((2 ^ 32 -1) / 2 ^ 32) ^ (n (n-1) / 2). Смотри http://en.wikipedia.org/wiki/Birthday_problem
Число выборок, которые нам нужно нарисовать, чтобы иметь вероятность, превышающую 50%, чтобы иметь два совпадающих целых числа, составляет всего лишь немногим более 77000. Если теперь мы предположим, что вместо этого равномерно рисуем число 2 ^ 64 или два 2 ^ 32 целых числа (для восьми байтов), то мы получим ту же вероятность после 5 * 10 ^ 9 выборок, что составляет около 2 ^ 32. Обратите внимание, что даже если бы к тому времени мы могли видеть все целые числа, это все равно значительно короче, чем период Рэндома. Правда, вероятно, где-то посередине. Во всяком случае, вероятность очень низкая, но не совсем нулевая, как показано в постах выше.
Я что-то упустил?