在我下面的类中,我有两个字符串和一个equals方法用于我的自定义LinkedList。现在我知道如何在equals方法中比较不同的对象了,但是如果我想在程序中比较name,在比较number之前,我该如何在equals()方法中输入这个。下面我尝试了一个else if,但我知道这不会起作用,因为当我只想比较一个名字时,number会将自己与另一个数字进行比较,而在我的程序中,当我只想比较一个数字而不是一个名字时,如果这有意义的话。下面是我的类和我为我的equals方法所尝试的。任何帮助将不胜感激:)P.S抱歉类被称为Id我不太擅长堆栈溢出,无法让它显示在代码部分
private String number;
private String name;
public Id(){
this.number = "";
this.name = "";
}
public Id(String number,String name){
this.number = number;
this.name = name;
}
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public String getNumber(){
return this.number;
}
public void setNumber(String number){
this.number = number;
}
@Override
public boolean equals(Object o){
Id i = (Id)o;
if(this.number.equalsIgnoreCase(e.getNumber())){
return true;
}else if(this.name.equalsIgnoreCase(e.getName()))
return true;
else
return false;
'''
1条答案
按热度按时间1tuwyuhd1#
equals方法被破坏了。
1.它不应该扔。特别是,如果你试图问它:嘿,你和这个苹果平等吗,它应该回答“不”。您的代码将使用ClassCastException“回答”。
1.如果
number
等于另一个number
,则代码将返回true;如果name
等于另一个name
,则返回或。这是一个奇怪的定义。当然应该是:number
和name
应该相等。1.不能只覆盖equals,必须始终覆盖
equals
* 和 *hashCode
。如果你没有做到这一点,例如在HashMap
中使用这个对象作为键会导致完全奇怪的行为,你添加的键似乎消失在空气中。1.如果你想要一个只比较数字而不比较名字的equals方法,你可以这样做,你可以写任何你想要的。但是,equals方法必须是可交换的,结合的,并且坚持恒等式。换句话说,
a.equals(a)
必须为真,如果a.equals(b)
,则b.equals(a)
必须为真,如果a.equals(b) && b.equals(c)
,则a.equals(c)
必须为真。同样,如果你不遵守这些规则,编译器不会阻止你,但是各种类依赖于你的equals方法,如果它不这样做,它们会以奇怪的方式工作。如果你的目标真的是:如果name匹配name**或number匹配number,则任何2个ID都相等-那么您的方法主要是这样做的,尽管类型转换是错误的,但您必须添加: