第一种,我用了老师介绍的equals重写方法
@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null)
return false;
if(!(obj instanceof Course))
return false;
Course course = (Course)obj;
if(this.name == null){
if(course.name == null)
return true;
else
return false;
}else{
if(this.equals(course.name))
return true;
else
return false;
}这是我contains方法中的代码以及实现结果
public void testListContains(){
//取得备选课程序列的第0个元素
Course course = coursesToSelect.get(0);
//打印输出coursesToSelect是否包含course对象
System.out.println("取得对象"+course.name);
System.out.println("备选课程中是否包含课程:" +course.name + ":" +
coursesToSelect.contains(course));
//提示输入课程名称
System.out.println("请输入课程名称");
String name = console.next();
//创建一个新的课程对象,ID和名称
Course course2 = new Course();
course2.name = name;
System.out.println("新创建对象"+course2.name);
System.out.println("备选课程中是否包含课程:" +course2.name + ":" +
coursesToSelect.contains(course2));
//创建一个新的课程对象,ID和名称,与course对象完全一样
Course course3 = new Course(course.id,course.name);
System.out.println("新创建对象"+course3.name);
System.out.println("备选课程中是否包含课程:" +course3.name + ":" +
coursesToSelect.contains(course3));
}
第二次我直接用JAVA中自动生成的重载equals方法
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Course other = (Course) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}结果却是:

实在是不知道哪里出错了,求解答
17行改成this.name.equals(Course.name)
你自己写的判断条件写错了,在你重写equals方法里面的17行,你写的是this.equals(course.name),用对象和成员变量相比,肯定判断错误,然后进入else的判断,返回false。
望采纳,谢谢。