Why does this .equals() code example return quot;falsequot;?(为什么这个.equals()代码示例返回q;Falseq;?)
问题描述
考虑:
class Dog{
int height;
int weight;
String name;
}
public class DogTest {
public static void main(String[] args) {
Dog one = new Dog();
one.height=4;
one.name="fudo";
one.weight =2;
Dog two = new Dog();
two.height=4;
two.name="fudo";
two.weight =2;
if (one.equals(two)){
System.out.println("True");
}
else{
System.out.println("False");
}
}
}
为什么此输出为";False";?如果在Java中默认情况下,即使所有对象具有相同的值,也不是所有对象都相等,那么我如何才能说服Java相信这两个对象实际上是相等的?
好的,即使两只狗的名字、身高、体重相同,一只可能是斑点斗牛犬,另一只可能是斗牛犬,即使它们是同一种族,它们在自然界中也可能总是不同的。
ps:我的理解是,if(one==Two){}我们比较的是它们是否都引用堆上的同一对象,.equals字符串的.equals比较它们是否具有相同顺序的相同字符。
推荐答案
默认情况下,equals方法会说"这是内存中的同一对象吗?"除非您覆盖它。
您没有覆盖它。
行为未更改。
您需要添加如下所示的新方法
public boolean equals(Object o) {
if(o instanceof Dog) {
Dog d = (Dog)(o);
Dog t = this;
return t.height == d.height && t.weight == d.weight && t.name.equals(d.name);
}
return false;
}
Stephan提出了一个很好的观点--永远、永远、永远不实现等于没有hashCode。始终在两者中使用相同的字段。
public int hashCode() {
int hash = name.hashCode();
hash = hash * 31 + weight;
hash = hash * 31 + height;
return hash;
}
这篇关于为什么这个.equals()代码示例返回&q;False&q;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:为什么这个.equals()代码示例返回&q;False&q;?
基础教程推荐
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01