欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java Random,

来源: javaer 分享于  点击 28578 次 点评:33

Java Random,


[size=medium]Java Random类可以获取随机数,请看如下代码:
public class RandomTest {

public static void main(String[] args) {
RandomTest.getRandom();
System.out.println("---------------------------");
RandomTest.notGetRandom();
}

/**
* 执行n次返回数据不同
*/
public static void getRandom(){
Random r = new Random();
for(int i=1;i<4;i++){
System.out.println("第"+i+"次结果为:"+r.nextInt());
}
}

/**
* 相同的机器执行多次返回的内容是一致的
*/
public static void notGetRandom(){
Random r = new Random(1000);
for(int i=1;i<4;i++){
System.out.println("第"+i+"次结果为:"+r.nextInt());
}
}
}

执行多次结果如下:
执行第一次输出结果为:
第1次结果为:-255222630
第2次结果为:1123609859
第3次结果为:-1656551992
---------------------------
第1次结果为:-1244746321
第2次结果为:1060493871
第3次结果为:-1826063944


执行第二次输出结果为:
第1次结果为:-552545679
第2次结果为:1866864931
第3次结果为:-1883987848
---------------------------
第1次结果为:-1244746321
第2次结果为:1060493871
第3次结果为:-1826063944

发现方法notGetRandom在相同的机器上执行n次返回的结果都是一样的。

具体原因如下:
random 源码中定义如下:
public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;
每次构造一个Random对象时是以当前时间纳秒数加参数获得。


public Random(long seed) {
this.seed = new AtomicLong(0L);
setSeed(seed);
}
而Random(long seed)构造方法是以固定的种子seed获得。所以出现前面demo的情况就不言而明了。
Java中Random遵循2个规则
1、种子不同产生不同的随机数
2、种子相同即使实例不同也产生相同的随机数[/size]

相关文章

    暂无相关文章
相关栏目:

用户点评