第一种,我用了老师介绍的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。
望采纳,谢谢。