1. 程式人生 > >Random r = new Random(47)

Random r = new Random(47)

new Random(47); 相當於

Random r= new Random();
r.setSeed(47);

API文件說明

Random(long seed)

使用單個 long 種子建立一個新隨機數生成器: public Random(long seed) { setSeed(seed); } next 方法使用它來儲存隨機數生成器的狀態。

一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的演算法不停迭代產生隨機數。

setSeed 的方法介紹

使用單個 long 種子設定此隨機數生成器的種子。

setSeed 的常規協定是它更改此隨機數生成器物件的狀態,使其狀態好像是剛剛使用引數 seed 作為種子建立它的狀態一樣。

通過將種子自動更新為 (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)並清除nextGaussian()使用的haveNextNextGaussian 標誌,Random 類可實現 setSeed 方法。
Random 類實現的 setSeed 恰好只使用 48 位的給定種子。
但是,通常重寫方法可能使用 long 引數的所有 64 位作為種子值。

隨機數種子就是產生隨機數的第一次使用值, 機制是通過一個比較複雜的函式,將這個種子的值轉化為隨機數空間中的某一個點上,並且產生的隨機數均勻的散佈在空間中。 以後產生的隨機數都與前一個隨機數有關。

由此看來,對於一些由數學封裝好的方法,沒必要深究,不過有興趣的話另說。