有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么Random类不是静态的?

在Java中,我们有静态类数学。您不需要创建它的对象,使其保持静态。另一个是随机类。我们不需要创建它的实例,为什么它不是静态的呢?我的类我经常使用随机数,当必须在每个类中创建字段rand来生成随机数时,我会发疯。那么为什么它不是静态的呢


共 (4) 个答案

  1. # 1 楼答案

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

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

    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. # 2 楼答案

    原因是您可能需要几个独立的随机数生成器。这是通过有几个Random实例来实现的

  3. # 3 楼答案

    都是关于种子的。你们知道,我们谈论的不是真随机数,而是伪随机数。当你知道第一个数字时,你就可以计算其他数字了。这就是为什么我们使用所谓的“种子”。Random的每个对象都有不同的种子。如果Random是静态的,那么就不能有两个不同的种子。注意setSeed()方法会影响所有随机数生成器(我们通常只想更改一个)

  4. # 4 楼答案

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

    如果需要多个独立的生成器(不共享状态),则需要单独的实例