我在两台机器上运行相同的代码。一个(Windows 7 64)使用:
java version "1.7.0"
java<TM> SE Runtime Environment <build 1.7.0-b147>
Java HotSpot<TM> 64-Bit Server VM <build 21.0-b17, mixed code>
和另一个(linux 64)使用:
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)
我得到了不同的输出。我认为这是VM,因为我复制了.class文件,运行它们,并且仍然有不同的输出。 任何人都能说出可能导致这种情况的原因吗?
编辑:
代码位于http://pastebin.com/5EmYFkYn
输出应在两次运行之间有所不同,但不如两台机器之间的那么大。
答案 0 :(得分:2)
我在同一个Linux机器上使用Java 6更新31获得~1.78,使用Java 7更新7获得~3.8。
但是,如果我得到new Random(1)
或其他数字的随机种子,我会得到相同的结果。例如1对于第三个数字总是产生~0.79。
查看如何创建随机种子的代码,代码是完全不同的,我怀疑nextDouble()不是应该是随机的,即你的值应该变化得多,它应该如此重要种子定了。
每次在具有相同Java版本的同一台机器上运行它时,我都会得到不同的结果。很可能因为代码中存在随机元素。
499470 0 3.7783771731449503 10000.355400975242 0.07565041858446288 42
499430 0 3.8374792234448916 10001.384837656298 0.07684781955465791 53
499604 0 3.868284648304009 10000.698947869778 0.07743242690681965 57
499114 0 3.822480313596936 10001.023197561686 0.07659315164172079 46
500030 0 3.8653339884104576 10000.112232176294 0.077302909223347 43
由于同一台机器上的运行不同,我希望它们在不同的机器上以及不同版本的Java上都是不同的。
我仍然会认真考虑获得比Java 7更新版本的Java“无需更新”或4年前的Java 6版本。
答案 1 :(得分:0)
其中一台机器运行java 6,另一台运行java 7.这些版本之间有许多变化:
http://openjdk.java.net/projects/jdk7/features/
此外,根据文档,可能会有许多细节更改可能会影响未描述或未定义的行为。
如果不查看源代码或者至少知道您正在讨论的输出中存在哪种差异,那么这些差异中的哪些可能会影响您的程序。