此處只做結論性記錄,不做具體分析。
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(); }
區別也就一目了然了。