我有一个包含Random
对象的类。我使用Random
对象作为重载hashCode()
和equals(Object o)
方法的一部分。我发现使用相同种子创建的两个java.util.Random
对象不会产生相同的哈希码,也不会等于返回true。
public class RandomTest extends TestCase {
public void testRandom() throws Exception {
Random r1 = new Random(1);
Random r2 = new Random(1);
assertEquals(r1.hashCode(), r2.hashCode()); //nope
assertEquals(r1, r2); //nope
}
}
我知道明显的工作是使用种子和nextSomething()进行比较(不完美,但它应该足够好)。所以我的问题是为什么用同一种子和同一次迭代创建的两个Random类型的对象不相等?
答案 0 :(得分:11)
java.util.Random
类不会覆盖equals()
和hashCode()
方法,因此调用Object
类的哈希代码,在内存中返回该对象的地址。因此,2个不同的Random对象有2个不同的hashCodes,因为它们实际上是不同的对象。
答案 1 :(得分:0)
您似乎将Random
对象与结果混淆。 Random
对象是随机数生成器,而不是随机数。比较它们毫无意义。无论你想做什么,都应该以不同的方式完成。