【发布时间】:2014-03-25 18:10:54
【问题描述】:
Random 类的 nextLong() 方法的 Javadoc 指出
因为类 Random 使用只有 48 位的种子,所以该算法不会返回所有可能的 long 值。 (Random javadoc)
实现是:
return ((long)next(32) << 32) + next(32);
我看到它的方式如下:要创建任何可能的 long,我们应该生成任何可能的 64 位比特模式,具有相同的可能性。假设对 next(int) 的调用给了我们 32 个随机位,那么这些位的连接将是一个 64 个随机位的序列,因此我们生成每个 64 位模式的可能性相等。因此所有可能的长值。
我想编写 javadoc 的人更清楚,我的推理在某种程度上是有缺陷的。谁能解释我的推理在哪里不正确,然后会返回什么样的多头?
【问题讨论】:
-
我的猜测是这不能生成前半部分等于后半部分的数字。如果他们这样做了,
next(32)将始终生成相同的数字。这意味着每次调用它时总是生成相同的 long。