equals方法里?为何重写后变true?Object和String的equals在官网看不懂

equals方法里?为何重写后变true?Object和String的equals在官网看不懂

	//重载
	public boolean equals(Animal obj) {
		if (obj == null)
			return false;
		if (this.getName().equals(obj.getName()) && this.getMonth()==obj.getMonth())
			return true;
		else
			return false;
	}	

1、其中this.getName().equals(obj.getName(),里面的equals是继承Object还是String的equals?为什么是继承一个,不是继承另一个?

2、为什么重写后变true?我看了Oracle的Object和String的equals方法,完全看不出区别,怎么会一个是比较是否同一片内存空间,一个是比较值是否相等呢?

public boolean equals(Object obj)

Parameters:

obj - the reference object with which to compare.

==================================

public boolean equals(Object anObject)

Parameters:

anObject - The object to compare this String against

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,String类中重写了equals()方法,所以这时我们进入String类查看重写后的equals()方法。如图所示,在使用equals()方法时,首先会根据instanceOf()方法判断此对象是否是String类型,如果是的话,再比较字符串内容是否相等。http://img1.sycdn.imooc.com//climg/5ca16dcb0001815005330375.jpg我们再打开Object中的equals()方法,发现在这个方法中,只比较了两个对象的引用地址是否相等。所以,二者equals方法比较的不是同一个东西。http://img1.sycdn.imooc.com//climg/5ca16f060001b30304560072.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

提问者 慕哥5118177 2019-03-31 21:39:30

多谢! 问题1,明白了。 问题2,我的意思是,我知道Object和String的equals是比较不同的东西,但我看不明白,为什么Object和String的equals是比较不一样的东西?

程序圆圆圆 2019-03-31 16:34:18

问题1:equals继承自哪里看你怎么调用,你这里是this.getName().equals(obj.getName())

所以可以看成字符串.equals,所以调用的是String类型的equals,String类型只是重写了object类的这个方法

问题2:OBJ的equals方法比较的是两个对象的引用地址,而String的equals方法比较的是两个对象的值

  • 提问者 慕哥5118177 #1
    多谢! 问题1,明白了。 问题2,我的意思是,我知道Object和String的equals是比较不同的东西,但我看不明白,为什么Object和String的equals是比较不一样的东西?
    2019-03-31 21:39:15
  • 程序圆圆圆 回复 提问者 慕哥5118177 #2
    string重写了obj的方法啊。。
    2019-03-31 21:40:49
  • 提问者 慕哥5118177 回复 程序圆圆圆 #3
    谢谢!但是String 的equals为什么和Object的不一样呢?
    2019-03-31 23:26:46
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师