假设我通过使用 new Random() 实例化静态最终 Random 对象来使用相同的种子,是否可以通过在同一实例中调用 nextBytes 来获得相同的数字两次?
我知道对于任何给定的种子,可以确定所有可能的“随机”数字,它实际上更像是一个序列:
synchronized protected int next(int bits) {
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
}
所以基本上如果我有这个代码:
private static final Random random = new Random();
public void doSomething() {
for (int i=0; i < 1000000000; i++) {
byte byteArray[] = new byte[8];
random.nextBytes(byteArray)
}
}
nextBytes 在遍历所有可能生成的数字之前生成相同字节的可能性有多大?
在返回给定位的所有可能组合之前,这会返回相同的值吗?我猜是的,但这种情况多久发生一次?