为了账号安全,请及时绑定邮箱和手机立即绑定

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

第一种,我用了老师介绍的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://img1.sycdn.imooc.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://img1.sycdn.imooc.com//582936d30001f31e12370328.jpg

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

正在回答

2 回答

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

0 回复 有任何疑惑可以回复我~

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

望采纳,谢谢。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信