assertEquals
使用方法进行比较。有一个不同的断言 ,它使用运算符。equals
assertSame
==
要理解为什么不应该与字符串一起使用,您需要了解它的作用:它执行身份检查。也就是说,检查是否和引用同一对象。它被内置到语言中,它的行为不能被不同的类改变。另一方面,该方法可以被类重写。虽然它的默认行为(在类中)是使用运算符执行标识检查,但许多类(包括 )会覆盖它以执行“等效”检查。在 的情况下,不是检查 是否和引用同一个对象,而是检查它们引用的对象是否是包含完全相同字符的字符串。==
==
a == b
a
b
equals
Object
==
String
String
a
b
a.equals(b)
类比时间:想象每个物体都是一张纸,上面写着一些东西。假设我有两张写着“Foo”的纸,另一张写着“Bar”的纸。如果我拿前两张纸来比较它们,它会回来,因为它本质上是在问“这些是同一张纸吗?它甚至不需要看纸上写的东西。事实上,我给它两张纸(而不是同一张纸两张)意味着它会返回 。但是,如果我使用,该方法将读取两张纸,并看到它们说同样的事情(“Foo”),因此它将返回 。String
==
false
false
equals
equals
true
与字符串混淆的一点是,Java具有“实习”字符串的概念,并且(有效地)自动对代码中的任何字符串文本执行。这意味着,如果代码中有两个等效的字符串文本(即使它们位于不同的类中),它们实际上都会引用同一个对象。这使得操作员返回的频率比预期的要高。String
==
true