比较对象名称

时间:2017-05-13 23:30:22

标签: java object equals

我需要比较两个对象,如果名称相等则返回true,否则返回false。

public class Team {
private String TeamName;

public Team(String name)
{
    TeamName = name;

}

// I was trying this way but I was not able to do it.
public boolean equals(Object object) {
    if (TeamName.equals(objet.toString())) {
        return true;
    }
    else{
        return false;
    }

3 个答案:

答案 0 :(得分:2)

您应该在TeamName课程中的name字段替换Team 重复Team是多余的,变量名称应以小写字母开头。

对于相等性,首先必须检查类型兼容性,然后可以通过比较equals()字符串字段来使用name方法。
而是直接使用String#equals(Object o)方法,您可以使用Objects.equals(Object a, Object b)来保留name字段的空检查。

最后,当您覆盖equals()时,hashcode()也应如此 覆盖以保持这两种方法的一致性。

@Override
public boolean equals(Object object) {
    if (!(object instanceof Team)){
       return false;
    }  

    Team otherTeam = (Team) object;        
    return Objects.equals(name, otherTeam.name);
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
}

答案 1 :(得分:0)

您需要先将参数object强制转换为Team类型,以便比较其名称。

示例:

public boolean equals(Object object) {
     if(object instanceof Team) {
         Team team = (Team)object;
         return this.TeamName.equals(team.TeamName);
     }
     return false;
}

答案 2 :(得分:0)

这不起作用,因为object.toString()没有返回另一个对象的TeamName成员变量的值(如果类Team没有重写toString()方法)。

equals()方法中,您应该:

  1. 使用Team
  2. 检查其他对象实际上是instanceof对象
  3. 如果是,则将其投射并获取其他对象的TeamName变量,并将其与当前对象进行比较
  4. 像这样:

    public boolean equals(Object object) {
        if (object instanceof Team) {        // check if it is a Team
            Team otherTeam = (Team) object;  // cast to Team
            return TeamName.equals(other.TeamName);  // compare and return result
        } else {
            return false;  // the other object is not a Team
        }
    }