为什么我重写了equals方法结果还是返回false呢

来源:6-1 学生选课---判断 List 中课程是否存在

慕田峪7021683

2016-11-14 12:00

第一种,我用了老师介绍的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));
		}

http://img.mukewang.com/5829367a0001fb4109830256.jpg

第二次我直接用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;
	}

结果却是:

http://img.mukewang.com/582936d30001f31e12370328.jpg

实在是不知道哪里出错了,求解答

写回答 关注

2回答

  • chrealcool
    2016-11-26 13:31:28

    17行改成this.name.equals(Course.name)

  • KeT
    2016-11-14 15:03:17

    你自己写的判断条件写错了,在你重写equals方法里面的17行,你写的是this.equals(course.name),用对象和成员变量相比,肯定判断错误,然后进入else的判断,返回false。

    望采纳,谢谢。

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题