我有一个包含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
}
}
Run Code Online (Sandbox Code Playgroud)
我知道明显的工作是使用种子加nextSomething()进行比较(不完美,但它应该足够好).所以我的问题是为什么用同一种子创建的两个Random类型的对象并且在同一次迭代中不相等?
Pet*_*etr 11
所述java.util.Random类不覆盖equals()和hashCode()方法,从这样的散列码Object类被调用时,在存储器中用于所述对象返回的地址.因此,2个不同的Random对象具有2个不同的hashCodes,因为它们实际上是不同的对象.
| 归档时间: |
|
| 查看次数: |
270 次 |
| 最近记录: |