为什么随机类不是静态的?

2022-09-01 18:28:14

在Java中,我们有静态类数学。您不需要创建其对象,因此它是静态的。另一个是随机类。我们不需要创建它的实例,那么为什么它也不是静态的呢?我的班级我经常使用随机麻木,当必须在每个班级中创建字段rand以生成随机数时会生气。那么,为什么它不是静态的呢?


答案 1

Random 类具有状态,包括它在其序列中的位置,因为生成的值不是真正随机的,只是一个伪随机序列。

这可以通过使用相同的种子初始化两个实例来证明。

Random a = new Random(123);
Random b = new Random(123);
for (int i = 0; i < 5; i++) {
    System.out.println(a.nextInt() + "," + b.nextInt());
}

输出

-1188957731,-1188957731
1018954901,1018954901
-39088943,-39088943
1295249578,1295249578
1087885590,1087885590

如果使用默认构造函数 Random() 进行创建,则种子将基于当前时间(以纳秒为单位 +静态计数器)进行初始化,这意味着不同的实例很可能具有不同的序列。


答案 2

确实需要创建实例,因为随机数生成器具有状态。具体而言,是控制伪随机序列中当前位置的状态。

如果你想要多个独立的生成器(不共享状态),那么你需要单独的实例。


推荐