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(); }
区别也就一目了然了。