为什么使用相同种子创建的两个 Random 对象从 hashcode() 产生不同的结果

Why do two Random objects created with the same seed produce different results from hashcode()

我有一个包含 Random 对象的 class。我使用 Random 对象作为重载 hashCode()equals(Object o) 方法的一部分。我发现使用相同种子创建的两个 java.util.Random 对象不会产生相同的哈希码,也不等于 return 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 类型的对象不相等?

java.util.Random class 不会覆盖 equals()hashCode() 方法,因此会调用 Object class 中的哈希码,返回对象在内存中的地址。所以 2 个不同的 Random 对象有 2 个不同的哈希码,因为它们实际上是不同的对象。

您似乎混淆了 Random 对象和结果。 Random 对象是一个随机数生成器,而不是一个随机数。比较它们没有意义。无论您尝试做什么,都应该以不同的方式完成。