我正在学习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());
}
答案 0 :(得分:7)
因为当你调用toString()方法时,两者都返回“test”字符串,因为Pattern类会覆盖它。但是如果只比较Pattern对象,它们就是2个不同的对象,因此即使它们具有相同的状态,也不会等于另一个对象。
equals方法检查引用相等性。
答案 1 :(得分:1)
。模式对象的等式检查两者是否都指向同一个对象。
但是String.equals方法检查两个字符串是否相同(不是对象引用比较)
即为什么第二个过去了。
答案 2 :(得分:0)
equals()
方法比较两个对象的哈希码。在fomer的情况下,有两个不同的对象具有不同的哈希码,因此测试失败。在后一种情况下,有两个字符串“test”,它们将具有相同的哈希码,因此测试通过。