Math.Random和java.util.Random区别

此处只做结论性记录,不做具体分析。

Random有两个构造器,有参和无参:

#有参构造器
Random random = new Random(seed);
通过有参构造器创建的random生成的随机数是通过传入的种子通过特定的算法计算出来的,所以多次运行返回的随机数总是一样的顺序
public class test {
public static void main(String[] args) {
Random random = new Random(50);
for (int i=0;i<5;++i){
System.out.println(random.nextInt(5));
}
}
}
如上代码多次运行返回结果总是:
2
3
3
2
1

#无参构造器

无参构造器内部也是调用的有参构造器,只是种子是通过系统当前时间计算出来的一个long型数据,所以多次运行结果都不一样
public Random() {
this(seedUniquifier() ^ System.nanoTime());
}

Math.Random返回[0,1)范围的double类型数据

内部也是调用的Java.util.Random无参构造器实现的

    public static double random() {
        return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
    }

    private static final class RandomNumberGeneratorHolder {
        static final Random randomNumberGenerator = new Random();
    }

区别也就一目了然了。

posted @ 2019-09-21 10:30  暗夜心慌方  阅读(1352)  评论(0编辑  收藏  举报