当我在Eclipse中查看源代码时,该next方法java.util.Random基本上是:
seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
return (int)(seed >>> (48 - bits));
Run Code Online (Sandbox Code Playgroud)
如何确定不同的JDK或JVM next是以不同的方式实现还是以不同的常量实现?
在播种Java Random时,我已经在奇怪的行为中遇到了不同的无参数构造函数 .我想知道该next方法是否会发生类似的事情.我在哪里可以找到不同实现的来源?
Javadoc用于Random.next()明确说明哪个算法用于生成下一个数字.
理论上可能不同的JVM可能使用不同的算法,但这不太可能,特别是如果您将自己限制为基于Sun/Oracle库的JVM.
该文档是否必然适用于所有JDK?
你需要检查以确定,但可能是的.这是Sun/Oracle不太可能改变的事情,因为有可能破坏过去15年左右的大量现有Java应用程序和测试套件.
以下是一些事实:
Java 1.3.1到Java 1.7(*)的javadoc包含与此方法完全相同的规范,
如果符合规范,则只允许使用商标"Java"
大多数(如果不是全部)Java(TM)实现使用从Oracle/Sun源代码派生的类库,
开发人员会注意到使用了不同的算法......然后大声抱怨.
因此,使用不同算法进行Java(TM)实现的可能性非常小.
(*我在网上找不到Java 1.1 javadocs,但我希望他们能说同样的话.)