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

标签 java random

在 Java 中,我们有静态类 Math。您不需要创建它的对象,所以它是静态的。另一个是随机类。我们不需要创建它的实例,那为什么它也不是静态的呢?我的类(class)我经常使用随机数,当必须在每个类(class)中创​​建字段 rand 以生成随机数时,我会很生气。那么为什么它不是静态的呢?

最佳答案

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() 创建,则种子会根据当前时间(以纳秒为单位)+ 静态计数器进行初始化,这意味着不同的实例很可能有不同的序列。

关于java - 为什么 Random 类不是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424608/

相关文章:

android - 如何生成随机切换按钮的 ID,然后设置特定切换按钮的 SetChecked(True)

javascript - 是否可以为生成器中的图像添加权重?

javascript - 与express js一起使用的synchronize.js

r - 蒙特卡洛积分不起作用?

java - Apache commons 压缩 7z 文件大小比 p7zip 压缩大得多

java - Hibernate:多重选择@OneToMany

java - Intellij 错误运行 'JBoss Remote' : Unable to connect

java - 用于断言实现的表达式的字符串表示

java - 如何从一个Fragment导航到另一个Fragment?

php - 如何从加权列表中挑选 4 个独特的项目?