从JDK 18开始,RandomGenerator的默认算法即L32X64MixRandom(自17年起提供),每次调用时都会生成相同的数字.

jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$10 ==> 526

jshell> java.util.random.RandomGenerator.getDefault().nextInt(100,999)
$11 ==> 526

jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$14 ==> 526

jshell> java.util.random.RandomGenerator.of("L32X64MixRandom").nextInt(100, 999)
$15 ==> 526

javadoc也没有发出任何特别的警告:

返回指定原点(包含)和指定边界(独占)之间的伪随机 Select 的int值.

实施要求:

而包括传统算法在内的其他算法似乎具有可感知的随机性水平,例如.

jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$7 ==> 451

jshell> java.util.random.RandomGenerator.of("Random").nextInt(100,999)
$8 ==> 633

jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$12 ==> 570

jshell> java.util.random.RandomGenerator.of("L64X128MixRandom").nextInt(100, 999)
$13 ==> 844

这种默认 Select 的决定论水平有什么原因吗?

编辑:行为wrt.流非常相似,初始值似乎总是相同的

jshell> java.util.random.RandomGenerator.getDefault().ints(100,999).limit(5).toArray()
$22 ==> int[5] { 526, 860, 258, 558, 820 }

jshell> java.util.random.RandomGenerator.getDefault().ints(100,999).limit(5).toArray()
$23 ==> int[5] { 526, 866, 448, 654, 684 }

推荐答案

这是一个列为https://bugs.openjdk.java.net/browse/JDK-8282551的错误

它在Java 19中显示为已修复,并且有一个到Java 17和18的后端口请求(https://bugs.openjdk.java.net/browse/JDK-8284185已在2022年4月1日解决),但不清楚后端口修复将在何时出现.

虽然这是一个只有链接的答案,但我相信它是合适的,因为其他人会遇到这个错误并在这里搜索.

Java相关问答推荐

将数组整体转换为链接表

无法在WebSocket onMessage中捕获错误

try 创建一个对象,使用它,然后使用一条语句将其存储为列表

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

我如何知道MediaDiscoverer何时完成发现介质?

由于在生成器模式中使用泛型,lambda表达式中的返回类型错误

Java堆中的许多java.time.ZoneRegion实例.ZoneId实例不应该被缓存吗?

AbstractList保证溢出到其他方法

如何在Record Java中使用isRecord()和RecordComponent[]?

获取所有可以处理Invent.ACTION_MEDIA_BUTTON Android 13 API33的Android包

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

如何通过用户ID向用户发送私信

Cucumber java-maven-示例表-未定义一步

如何使用带有可选参数的类生成器?

如何在Selenium上继续使用最新的WebDriver版本

读取ConcurrentHashMap中的可变对象

获取月份';s在java中非UTC时区的开始时间和结束时间

如何使用 JDBC 更改 Postgres Enum 类型

我真的能很好地解释同步计数器和 AtomicInteger 的 JMH 结果吗