public static void main(String[] args)throws Exception {
SecureRandom secureRandom1 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG");
System.out.println(secureRandom2.equals(secureRandom1));
byte[] seed={12,11,123};
secureRandom1.setSeed(seed);
secureRandom2.setSeed(seed);
System.out.println(secureRandom1.nextInt());
System.out.println(secureRandom2.nextInt());
}
每次都新生成一個SecureRandom 物件,而SecureRandom 沒有覆蓋equals方法
所以它用超類Ojbect的equals方法
public boolean equals(Object obj) {
return (this == obj);
所以 System.out.println(secureRandom2.equals(secureRandom1));
的結果是false
但是兩個物件的內部結構是一樣的,所以它們設定相同的seed,執行相同方法的結果是一樣的。可以檢視jdk原始碼
public static void main(String[] args)throws Exception {
SecureRandom secureRandom1 = SecureRandom.getInstance("SHA1PRNG");
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG");
System.out.println(secureRandom2.equals(secureRandom1));
byte[] seed={12,11,123};
secureRandom1.setSeed(seed);
secureRandom2.setSeed(seed);
System.out.println(secureRandom1.nextInt());
System.out.println(secureRandom2.nextInt());
}
每次都新生成一個SecureRandom 物件,而SecureRandom 沒有覆蓋equals方法
所以它用超類Ojbect的equals方法
public boolean equals(Object obj) {
return (this == obj);
}
所以 System.out.println(secureRandom2.equals(secureRandom1));
的結果是false
但是兩個物件的內部結構是一樣的,所以它們設定相同的seed,執行相同方法的結果是一樣的。可以檢視jdk原始碼