使用.equals()来比较两个对象的变量

时间:2013-03-04 23:41:37

标签: java object equals

我需要搜索一个对象集合,找到哪个对象包含一个与我读入的字符串匹配的'name'变量。下面是每个Student对象的样子:

public Student(String name, String class)
{
    this.name = name;
    this.class = class;
}

我还在employee类中编写了这个.equals()方法来进行对象比较。

public boolean equals(Student student)
{
    return this.name.equals(student.name); 
}

在我的主课程中,我将学生的名字转换为Student对象,并使用.equals()方法与其他每个学生进行比较。

public static void loadStudentProjects(ArrayList students)
Student currentStudent;
String studentName = "name";

  while (count < students.size())
  {
    currentStudent = Students.create(studentName); 
 //The Student object is initialized as (name, null)

System.out.println(currentStudent.equals(students.get(count)));
count++;

即使我知道第一个比较应该显示名称匹配,但此代码对每个比较都返回false。我被告知我需要转换我正在与一个对象进行比较的String名称并使用.equals()方法,但我找不到一种方法来使它工作。

2 个答案:

答案 0 :(得分:10)

重载 equals方法,而不是覆盖它。它看起来应该更像

public boolean equals(Object o) {
    ...
}

在您的情况下,要检查任意对象o是否等于this学生,您想要

  1. 检查o确实是Student个实例。
  2. 假设 1 为真,请检查othis是否有名称。
  3. 所以你可以尝试一下

    (o instanceof Student) && name.equals(((Student) o).name)
    

答案 1 :(得分:0)

我建议您使用equals(或compareTo)而不是compareToIgnoreCase

public int compareTo(Student s) {
    return this.name.compareTo(s.name);
}
如果字符串相等,

compareTo会返回0,而在任何其他情况下,<{1}}会返回0的数字。

要与Student个对象进行比较,您可以使用以下内容:

public void aMethod(ArrayList students) {
    Student aStudent;
    int count;
    count = 0;

    aStudent = newStudent("name", "class") // Construct the Student object with the appropriate parameters
    for (Student s : students) {
        if s.compareTo(aStudent) == 0 {
            // Do something
        }
    }
}

希望这有助于你