为什么用相同的种子创建的两个随机对象会产生不同的哈希码()结果



我有一个包含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对象是随机数生成器,而不是随机数。比较它们是没有意义的。无论你想做什么,都应该以不同的方式完成。

最新更新