我想澄清一下我是否理解正确:
==
是引用比较,即两个对象都指向同一个内存位置.equals()
评估对象中值的比较
原文由 brainydexter 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想澄清一下我是否理解正确:
==
是引用比较,即两个对象都指向同一个内存位置.equals()
评估对象中值的比较原文由 brainydexter 发布,翻译遵循 CC BY-SA 4.0 许可协议
关于 String 类:
equals() 方法 比较 String 实例(在堆上)内的“值”,而不管两个对象引用是否引用相同的 String 实例。如果任何两个 String 类型的对象引用都引用同一个 String 实例,那就太好了!如果两个对象引用引用两个不同的 String 实例.. 它没有什么区别。它是每个正在比较的 String 实例中的“值”(即:字符数组的内容)。
另一方面,“==” 运算符 比较 两个对象引用 的值,看它们是否引用同一个 String 实例。如果两个对象引用的值“引用”同一个 String 实例,那么布尔表达式的结果将是“true”..duh。另一方面,如果两个对象引用的值“引用” 不同的 String 实例(即使两个 String 实例具有相同的“值”,即每个 String 实例的字符数组的内容相同)布尔表达式的结果将为“false”。
与任何解释一样,让它沉入其中。
我希望这可以解决一些问题。
原文由 Jacques Colmenero 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
一般来说,您的问题的答案是“是”,但是……
.equals(...)
只会比较它所写的比较,不多也不少。equals(Object o)
方法。Object#equals(Object o)
方法。根据对象 API,这与==
相同;也就是说, 当且仅当 两个变量都引用同一个对象时,如果它们的引用是一个且相同的,它才返回 true。因此,您将测试 对象相等 而不是 功能相等。hashCode
equals
以免“违反合同”。根据 API,如果两个对象的equals
方法表明它们是等效的,则从hashCode()
方法返回的结果 必须 相同。反过来 不一定 是真的。