一般来说都是伪随机数,就是用你运行的时间作为输入,然后通过求余等运算计算出来的
答案补充
求余也是一种哈希函数,不过哈希函数需要解决冲突。伪随机数不一定要吧。我就遇到第二天运行和第一天运行出现同样结果的情况。
1. 如果没有设种子seed,则自动选择当前的系统时间毫秒作为种子,种子为48bits
public Random() { this(System.currentTimeMillis()); }
2. 如果自己设置了种子,用如下公式计算:
this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
3. 计算时,使用如下公式:
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
4. 需要int就将上面的bits设为32
另外还有其他一些数据类型,请看javadoc
5. 如果是long就先算出32,然后左移32位,再加上新算的一个32bits的数
6. 如果是boolean,bits设为1