JUnit,比较对象

时间:2012-06-14 07:49:51

标签: java regex unit-testing testing junit

我正在学习JUnit,我知道assertEquals()调用equals()方法来比较对象......那么为什么以下测试比较两个正则表达式模式对象不会传递?

@Test
public void testTwoCompiledPattern()
{   
    assertEquals(Pattern.compile("test"), Pattern.compile("test"));
}

这个通过:

@Test
public void testTwoCompiledPattern()
{   
    assertEquals(Pattern.compile("test").toString(), Pattern.compile("test").toString());
}

3 个答案:

答案 0 :(得分:7)

因为当你调用toString()方法时,两者都返回“test”字符串,因为Pattern类会覆盖它。但是如果只比较Pattern对象,它们就是2个不同的对象,因此即使它们具有相同的状态,也不会等于另一个对象。

equals方法检查引用相等性。

答案 1 :(得分:1)

。模式对象的等式检查两者是否都指向同一个对象。

但是String.equals方法检查两个字符串是否相同(不是对象引用比较)

即为什么第二个过去了。

答案 2 :(得分:0)

equals()方法比较两个对象的哈希码。在fomer的情况下,有两个不同的对象具有不同的哈希码,因此测试失败。在后一种情况下,有两个字符串“test”,它们将具有相同的哈希码,因此测试通过。