How equals() different than == in Java
如我们所知,==比较参考文献,equals()比较内容。但在检查了对象类中的equals()实现之后,我感到困惑。实施是,
1 2 3
| public boolean equals (Object obj ) {
return (this == obj );
} |
正如您看到的实现。equals内部调用==运算符。那又有什么不同呢?
- 现在检查任何其他equals()实现的源代码。说:整数中的那个
- 对于默认的equals实现Object,它们是相同的。对于覆盖方法的String或其他类,它们是不同的。
- 如果要比较等式,则定义了自己的逻辑(Java应该知道什么使两个对象在逻辑上相等)?。这是您重写equals并定义逻辑的&180;而标准Object#equals即使比较两个对象是否引用同一个实例,也不能&180;进行任何逻辑比较。
- 下次比较equals()和==时,我想我们应该提到字符串类,大多数时候我没有听字符串类引用。这就是我困惑的原因。现在有多清楚了。
它们完全不同,因为您可以覆盖equals(),但不能以任何方式覆盖==。
因此,当类作者决定检查两个对象的逻辑相等性时,equals()可以检查两个对象的逻辑相等性,但==总是比较引用,因此只有当两个操作数都是相同的对象(或相同的基元值)时才是真的。
- 我不知道为什么我的问题是-1,首先是4。但你真的提供了确切的区别。谢谢!
- 你投了反对票,因为这个问题是以前问过的。
- 可能是因为在这个网站上快速搜索可以给你答案,而不需要发布新的问题。
- @Jiritousek你能给我这个问题的链接吗?我不这么认为,它以前问过我和我写的内容/意思相同。
- 这个问题被标记为一个这样的问题的副本——对这个问题的回答非常全面地描述了equals()如何与==有关,以及为什么和何时两者返回相同的值。
- @好的,那可能是我理解错误。不管怎样,谢谢下次我会关心的。
equals()方法比较字符串实例(堆上)中的"value",不管两个对象引用是否引用同一个字符串实例。如果任何两个字符串类型的对象引用引用同一个字符串实例,那么太好了!如果这两个对象引用引用了两个不同的字符串实例。这没什么区别。它是被比较的每个字符串实例中的"值"(即:字符数组的内容)。
另一方面,"=="运算符比较两个对象引用的值,以查看它们是否引用同一个字符串实例。如果两个对象的值引用"引用"同一个字符串实例,那么布尔表达式的结果将是"true"…duh。另一方面,如果两个对象引用的值"引用"不同的字符串实例(即使两个字符串实例具有相同的"值",即每个字符串实例的字符数组的内容相同),则布尔表达式的结果将为"假"。