随机数生成
Math.random()方法
返回大于或等于0.0且小于1.0的带有正号的双精度值。返回值的选择是伪随机的,在这个范围内(近似)均匀分布。
当这个方法第一次被调用时,它会创建一个newpseudorandom-number生成器,就像通过表达式一样
—JavaAPI文档
- 返回一个大于或等于0.0且小于1.0的double类型。
- 随机范围呈现均匀分布
Random随机数生成器
该类的一个实例用于生成伪随机数字流。这个类使用48位种子,使用线性同余公式对其进行修改。(见Donald Knuth,《计算机编程的艺术》,第2卷,第3.2.1节)。
如果使用相同的seed创建了两个Random实例,并且为每个实例执行相同的方法调用序列,则它们将生成和返回相同的数字序列。为了保证这个特性,对类随机指定了特定的算法。为了Java代码的绝对可移植性,Java实现必须为Random类使用这里显示的所有算法。然而,随机类的子类允许使用其他算法,只要它们遵守所有方法的一般约定。
此方法被正确地同步以允许多个线程正确地使用。但是,如果许多线程需要以很高的速度生成伪随机数,那么每个线程拥有自己的伪随机数生成器可能会减少争用。
—JavaAPI文档
- Random类有多个方法可返回多种类型的随机数
-
nextInt()方法
- 无参数:返回一个Int数值范围内的整数(-2147483648~2147483647)
- 带参数:返回一个从 0~指定参数 区间内的Int类型随机数,参数必须为 正的整数类型
-
nextDouble()方法
和Math.random()方法类似,随机返回一个0~1之间的double类型数
-
nextFloat()方法
随机返回一个0~1之间的float类型数
-
nextLong()方法
随机返回一个long数值范围内的整数
-
nextBoolean()方法
随机返回一个bool类型值
-
- 无参与有参创建Random对象时的区别
- 无参创建Random对象
无参创建Random对象时使用 系统时钟 作为种子生成伪随机数。
多次运行中生成的随机数是不同的(系统当前时钟发生变化) - 有参创建Random对象
指定固定的数值作为种子生成伪随机数。
多次运行中生成的随机数是一样的(种子未变)
- 无参创建Random对象
- Random生成随机数是线程安全的
总结
- 使用Random类来生成随机数功能更加具体且强大。