1700440775
编写高质量代码:改善Java程序的151个建议 建议30:不要随便设置随机种子
1700440776
1700440777
随机数在太多的地方使用了,比如加密、混淆数据等,我们使用随机数是期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。在Java项目中通常是通过Math.random方法和Random类来获得随机数的,我们来看一段代码:
1700440778
1700440779
public class Client{
1700440780
1700440781
public static void main(String[]args){
1700440782
1700440783
Random r=new Random();
1700440784
1700440785
for(int i=1;i<4;i++){
1700440786
1700440787
System.out.println(“第”+i+“次:”+r.nextInt());
1700440788
1700440789
}
1700440790
1700440791
}
1700440792
1700440793
}
1700440794
1700440795
代码很简单,我们一般都是这样获得随机数的,运行此程序可知:三次打印的随机数都不相同,即使多次运行结果也不同,这也正是我们想要随机数的原因。我们再来看下面的程序:
1700440796
1700440797
public class Client{
1700440798
1700440799
public static void main(String[]args){
1700440800
1700440801
Random r=new Random(1000);
1700440802
1700440803
for(int i=1;i<4;i++){
1700440804
1700440805
System.out.println(“第”+i+“次:”+r.nextInt());
1700440806
1700440807
}
1700440808
1700440809
}
1700440810
1700440811
}
1700440812
1700440813
上面使用了Random的有参构造,运行结果如下:
1700440814
1700440815
第1次:-498702880
1700440816
1700440817
第2次:-858606152
1700440818
1700440819
第3次:1942818232
1700440820
1700440821
计算机不同输出的随机数也不同,但是有一点是相同的:在同一台机器上,甭管运行多少次,所打印的随机数都是相同的,也就是说第一次运行,会打印出这三个随机数,第二次运行还是打印出这三个随机数,只要是在同一台硬件机器上,就永远都会打印出相同的随机数,似乎随机数不随机了,问题何在?
1700440822
1700440823
那是因为产生随机数的种子被固定了,在Java中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
[
上一页 ]
[ :1.700440774e+09 ]
[
下一页 ]