以下代码应该创建两个具有相同种子的随机对象:
种子应该是相同的,因为在创建这两个对象之前和之后,
那么问题出在哪里呢?有人能解释一下为什么这两个生成器返回不同的输出,而它们应该具有相同的种子吗?
System.out.println("System time before: " + System.currentTimeMillis());
Random r1 = new Random();
Random r2 = new Random(System.currentTimeMillis());
System.out.println("System time after: " + System.currentTimeMillis());
System.out.println("r1: " + r1.nextInt());
System.out.println("r2: " + r2.nextInt());
种子应该是相同的,因为在创建这两个对象之前和之后,
System.currentTimeMillis()
没有发生变化,如下所示:System time before: 1331889186449
System time after: 1331889186449
r1: -1836225474
r2: 2070673752
从文档中可以看出,不带任何参数的构造函数是这样的:
public Random() { this(System.currentTimeMillis()); }
那么问题出在哪里呢?有人能解释一下为什么这两个生成器返回不同的输出,而它们应该具有相同的种子吗?
<ctrl>+<click>
来查看方法的源代码。 - Peter LawreySystem.currentTimeMillis()
在创建这两个对象前后并没有改变。 - Jesper