gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:03 24 4
gpt4 key购买 nike

我有一个包含 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() 进行比较(不完美,但应该足够好)。所以我的问题是,为什么使用相同种子和相同迭代创建的两个 Random 类型的对象不相等?

最佳答案

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

关于java - 为什么使用相同种子创建的两个 Random 对象从 hashcode() 产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com