我有一个包含Random
对象的类。 我将Random
对象用作重载hashCode()
和equals(Object o)
方法的一部分。 我发现用同一种子创建的两个java.util.Random
对象不会产生相同的哈希代码,也不会返回 equals 返回 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() 进行比较(不完美,但它应该工作得很好)。 所以我的问题是为什么两个随机类型的对象使用相同的种子和相同的迭代不相等?
java.util.Random
类不会重写equals()
和hashCode()
方法,因此调用Object
类中的哈希代码,返回对象的内存中的地址。所以 2 个不同的随机对象有 2 个不同的哈希码,因为它们实际上是不同的对象。
您似乎将Random
对象与结果混淆了。Random
对象是随机数生成器,而不是随机数。比较它们是没有意义的。无论你想做什么,都应该以不同的方式完成。