我试图覆盖Java中的equals
方法。我有一堂课People
,基本上有2个数据字段name
和age
。现在,我想重写equals
方法,以便可以在2个People
对象之间进行检查。
我的代码如下
public boolean equals(People other){
boolean result;
if((other == null) || (getClass() != other.getClass())){
result = false;
} // end if
else{
People otherPeople = (People)other;
result = name.equals(other.name) && age.equals(other.age);
} // end else
return result;
} // end equals
但是当我写age.equals(other.age)
它给我错误时,因为equals
方法只能比较String
并且age
是Integer
。
Solution
我==
按照建议使用运算符,问题解决了。
//Written by K@stackoverflow
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
ArrayList<Person> people = new ArrayList<Person>();
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));
for (int i = 0; i < people.size() - 1; i++) {
for (int y = i + 1; y <= people.size() - 1; y++) {
boolean check = people.get(i).equals(people.get(y));
System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
System.out.println(check);
}
}
}
}
//written by K@stackoverflow
public class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!Person.class.isAssignableFrom(obj.getClass())) {
return false;
}
final Person other = (Person) obj;
if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
return false;
}
if (this.age != other.age) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + (this.name != null ? this.name.hashCode() : 0);
hash = 53 * hash + this.age;
return hash;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Output:
`run:
– Subash Adhikari - VS - K false
– Subash Adhikari - VS - StackOverflow false
– Subash Adhikari - VS - Subash Adhikari true
– K - VS - StackOverflow false
– K - VS - Subash Adhikari false
– StackOverflow - VS - Subash Adhikari false
– BUILD SUCCESSFUL (total time: 0 seconds)`
问题内容: 今天,我遇到了一个有趣(非常令人沮丧)的方法问题,该问题导致我认为是一个经过良好测试的类崩溃了,并导致了一个错误,使我花了很长时间来追踪。 为了完整起见,我没有使用IDE或调试器-只是老式的文本编辑器和System.out。时间非常有限,这是一个学校项目。 无论如何- 我开发一个基本的购物车可能包含的Book对象。为了贯彻落实,以及对车的方法,我想检查,如果在已经存在。所以我走了 在测
问题内容: 在java中为什么需要覆盖equals和hashcode方法?什么时候用到? 问题答案: 让我们尝试通过一个示例来理解它,如果我们不进行覆盖而覆盖并尝试使用。 假设我们有一个类像这样那样的两个对象是相等的,如果他们等于(和生成) 仅覆盖 如果仅覆盖被覆盖,则在你第一次调用时将散列到某个存储桶,而在调用时将散列到其他存储桶(因为它们具有不同的)。因此,尽管它们是相等的,但由于它们没有散列
问题内容: 好的,我从很多地方和来源都听说过,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但是请考虑以下代码 这里的输出为true,完全按照我想要的方式为false,我根本不关心重写hashCode()方法。这意味着hashCode()覆盖是一种选择,而不是每个人都说的强制性选择。 我想要第二次确认。 问题答案: 它对您有用,因为您的代码未使用任何需要API的功能(Ha
我试图覆盖提到的方法为我的: MyObject: 如何重写hashcode(),equals()和compareTo()方法? 目前我有以下几点: 我读到通过id比较是不够的,这是对象是数据库的持久实体(见这里)。 此类型的所有对象的名称和编号不是唯一的。 那么我应该如何覆盖它呢? 我还需要比较它里面的hashMap吗? 我很困惑。该对象唯一独特的地方是map myMap,它将在生命周期的后期填充
问题内容: 在Java中重写equals方法以比较多个字段的最佳方法是什么?例如,我在类中有4个对象,分别为o1,o2,o3,o4,我想将所有这些对象与传递给equals方法的对象进行比较。 这段代码的问题在于它不清楚,如果我们有更多字段,就很难轻易修改。有没有更好的方法来实现这一目标? 问题答案: 一种便宜的方法是:
问题内容: 我想为Java中的ArrayList拥有toString()方法的自己的实现。但是,即使我将这样的toString()添加到包含ArrayList的类中,我也无法正常工作。 当我这样调用ArrayList时,我仍然会获得默认表示形式。我想念什么吗? 问题答案: 你应该做类似的事情 并将列表作为参数传递给。您 可以从 技术上扩展(使用匿名类或具体类)并实现自己,但这在这里似乎是不必要的。