获取随机值而不创建"Random"对象

Jof*_*sey 5 java

我正在编写一个带有十进制字段的类构造函数,需要通过随机值进行初始化.只需一个小字段,我需要创建新Random对象.首先它看起来繁琐,并且在第二有可能出现很多相等的值的,在一个时间片创建大量对象的情况下(new Random()是euqal到new Random(System.currentTimeMillis()),并且等于timeMillis需要等于随机值).

避免这种情况的最佳方法是什么?

Mic*_*rdt 9

新的Random()是新的Random(System.currentTimeMillis())的euqal

不,这不对.在最近的JDK中,new Random(seedUniquifier() ^ System.nanoTime()); seedUniquifier()基于在静态上运行线性同余生成器AtomicLong.因此,Random根据需要创建对象实际上是非常安全的.

当然,您始终可以拥有一个private static Random字段并在构造函数中使用它.


Ada*_*cin 6

您正在寻找Math.random.这是一个静态方法,Random它在第一次调用时隐式初始化一个新对象,然后再使用该对象.因此,您可以获得Random在所有静态字段初始化之间共享单个对象的好处,而无需自己管理Random对象.