我正在编写一个带有小数字段的类构造函数,它需要由一个随机值初始化。只有一个小字段,我需要创建新的 Random
对象。首先它看起来很麻烦,其次可能会出现很多相等的值,以防在一个时间片内创建很多对象(new Random()
等同于 new Random(System.currentTimeMillis())
,相等的 timeMillis 需要相等的随机值。
避免这种情况的最佳方法是什么?
最佳答案
new Random() is euqal to new Random(System.currentTimeMillis())
不,不是。在最近的 JDK 中,它是 new Random(seedUniquifier() ^ System.nanoTime());
其中 seedUniquifier() 基于在静态 AtomicLong
上运行线性同余生成器。所以根据需要创建 Random
对象实际上是完全安全的。
当然,您始终可以拥有一个private static Random
字段并在构造函数中使用它。
关于java - 获取随机值而不创建 `Random` 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113380/