gpt4 book ai didi

java - JRE 或平台之间的 java.util.Random 实现是否不同?

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:39 26 4
gpt4 key购买 nike

当我在 Eclipse 中查看源代码时,java.util.Randomnext 方法本质上是:

seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));

我如何确定不同的 JDK 或 JVM 是否会以不同的方式或使用不同的常量来实现 next

我已经在 Weird behaviour when seeding Java Random 中遇到过不同的无参数构造函数.我想知道 next 方法是否会发生类似的事情。在哪里可以找到不同实现的源代码?

最佳答案

Random.next() 的 Javadoc 明确说明了使用哪种算法生成下一个数字。

从理论上讲,不同的 JVM 可能会使用不同的算法,但这不太可能,尤其是如果您将自己限制在基于 Sun/Oracle 库的 JVM 时。


Does that documentation necessarily apply to all JDKs?

您需要检查才能确定,但​​可能是。这是 Sun/Oracle 不太可能改变的事情,因为它有可能破坏过去 15 年左右编写的大量现有 Java 应用程序和测试套件。

以下是一些事实:

  • Java 1.3.1 到 Java 1.7 (*) 的 javadoc 包含与此方法完全相同的规范,

  • 只有符合规范的实现才能使用“Java”商标

  • 大多数(如果不是全部)Java(TM) 实现使用派生自 Oracle/Sun 源代码的类库,

  • 开发人员会注意到使用了不同的算法......并大声提示。

因此,Java(TM) 实现使用不同算法的可能性非常小。

(* 我无法在线找到 Java 1.1 javadoc,但我希望他们会说同样的话。)

关于java - JRE 或平台之间的 java.util.Random 实现是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com