首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

new Random()和new Random(System.currentTimeMillis())两个构造方法到底是否等同?该如何解决

2012-04-08 
new Random()和new Random(System.currentTimeMillis())两个构造方法到底是否等同?不是说new Random()构造

new Random()和new Random(System.currentTimeMillis())两个构造方法到底是否等同?
不是说new Random()构造方法使用的种子是当前System.currentTimeMillis()么?可是为什么如下第一段代码产生的随机数相同,而第二段代码产生的随机数却不同呢?

new Random()和new Random(System.currentTimeMillis())这两个构造方法到底是否等同?

Java code
//如下代码产生相同的随机数for (int i = 0; i < 100; i++){    Random r = new Random(System.currentTimeMillis());    System.out.println(r.nextInt());}//如下代码产生不同的随机数for (int i = 0; i < 100; i++){    Random r = new Random();    System.out.println(r.nextInt());}


[解决办法]
非要解释吗??
好吧,我错了,我确实没好好研究过,但是如果你好好看过源码,你就发现问题了。
public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;
每次new 一个Random ,++seedUniquifier,而seedUniquifier在内存中只加载一次(因为是static),所以每次的种子是不一样的,所以得到不同的结果。
[解决办法]
你把创建 Random 对象的那行语句放到循环外面去。

热点排行