Random是java util包中提供的一个随机数生成器,其中存在一些疑惑,这里记录下:
1.Random提供的2个构造函数有什么区别
new Random() 生成一个和之前的数字生成器不同的生成器
new Random(int seed) 根据seed生成一个随机数生成器,如果seed相同,那么这组随机数生成器随机生成的数字也会相同
先解释下seed的概念:
seed中文解释是种子,它是指维护next方法的伪随机数的初始值
说到这里,如何理解这句话,就该区别对待Random的2个构造方法的却别了
new Random():创建一个新的随机数生成器,该生成器生成一个和在被调用的所有的随机数生成器均不同
public Random() { this(seedUniquifier() ^ System.nanoTime()); }
从他的构造方法就可以看出来,seedUniquifier生成一个不同的种子,nanoTime生成一个纳秒级的时间,一定程度上保证时间的唯一性,这样生成的随机数生成器在一定程度上是唯一的。
new Rnaomd(seed):根据上面seed的解释,则他会根据seed生成一个随机数生成器。因为也可以认为,当seed相同时,可以认定这组Random对象是相同的,但肯定不是同一个对象,因为new。那么他产生的随机数是否也相同呢?
public static void main(String[] args) { Random random = new Random(47); Random random1 = new Random(47); System.out.println(random.nextInt() == random1.nextInt()); }
返回true,则说明seed相同的Random对象生成的随机数是相同的。