Random类的nextLong()方法的Javadoc说明:
由于Random类仅使用48位种子,因此此算法将不返回所有可能的long值。(Random javadoc)
实现方式为:
return ((long)next(32) << 32) + next(32);
我认为应该这样做:要创建任何可能的long,我们应该以等概率生成64位的任意比特模式。假设调用
next(int)
会给我们32个随机比特,那么这些比特的串联将是一串64个随机比特,因此我们以等概率生成每个64位模式。因此可以生成所有可能的long值。我想撰写javadoc的人更清楚,我的推理有些错误。有人能解释一下我的推理哪里不对,以及将返回哪种类型的long吗?
next(32)
时会一直生成相同的数字。这意味着每次调用它时都会生成相同的长整型数字。 - FDinoff