1

我正在学习 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());
}
4

3 回答 3

8

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

equals 方法检查引用是否相等。

于 2012-06-14T07:54:05.347 回答
1

.equals 的 Pattern 对象检查两者是否引用同一个对象。

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

即为什么第二个通过了。

于 2012-06-14T07:57:08.560 回答
0

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

于 2012-06-14T08:24:28.373 回答