我需要搜索一个对象集合,找到哪个对象包含一个与我读入的字符串匹配的'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()
方法,但我找不到一种方法来使它工作。
答案 0 :(得分:10)
你重载 equals方法,而不是覆盖它。它看起来应该更像
public boolean equals(Object o) {
...
}
在您的情况下,要检查任意对象o
是否等于this
学生,您想要
o
确实是Student
个实例。o
和this
是否有名称。所以你可以尝试一下
(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
}
}
}
希望这有助于你