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

关于equals的问题。

关于equals的问题。

Beaten丶 2016-01-21 14:20:28
class Person{ private String name ; // 定义name属性 private int age ; // 定义age属性 public Person(String name,int age){ this.name = name ; this.age = age ; } public boolean equals(Object obj){ if(this==obj){ // 地址相等 return true ; // 肯定是同一个对象 } if(!(obj instanceof Person)){ // 不是Person对象 return false ; } Person per = (Person) obj ; // 向下转型 if(per.name.equals(this.name)&&per.age == this.age){ return true ; // 依次比较内容 }else{ return false ; } } public String toString(){ return "姓名:" + this.name + ";年龄:" + this.age ; }};public class ObjectDemo03{ public static void main(String args[]){ Person per1 = new Person("李兴华",30) ; // 实例化Person Person per2 = new Person("李兴华",30) ; // 实例化Person System.out.println(per1.equals(per2)?"是同一个人!" : "不是同一个人!") ; System.out.println(per1.equals("hello")?"是同一个人!" : "不是同一个人!") ; }};在程序public boolean equals(Object obj)中重写了equals,但是equals中if(per.name.equals(this.name)&&per.age == this.age)的equals方法是调用String中的equals方法 还是调用重写的public boolean equals(Object obj)方法呢。为什么 求详细解,头都整大了。
查看完整描述

6 回答

?
killer00go

TA贡献11条经验 获得超2个赞

if(!(obj instanceof Person)){ // 不是Person对象

System.out.println("不相等");//加一句代码进去就知道了

return false ;

}


查看完整回答
反对 回复 2016-01-22
?
killer00go

TA贡献11条经验 获得超2个赞

System.out.println(per1.equals(per2)调用重写的方法public boolean equals(Object obj){},而System.out.println(per1.equals("hello")?"是同一个人!" : "不是同一个人!") ;也是调用重写方法public boolean equals(Object obj){}

查看完整回答
反对 回复 2016-01-22
?
IMOOCER_Vi

TA贡献7条经验 获得超4个赞

好像说的不是很清楚,再说一下吧,你在自己重写的equals方法中随意加一个输出语句,然后运行以后不就可以判断出来了吗。我运行以后的结果证明调用的是重写以后的equals方法

查看完整回答
反对 回复 2016-01-21
?
微凉一季

TA贡献44条经验 获得超97个赞

调用的是String的,因为你调用方法的对象是name这个string呀,你直接用per.equals就是调用你写的方法了

查看完整回答
反对 回复 2016-01-21
  • Beaten丶
    Beaten丶
    不是很懂,程序执行到per1.equals(per2)的时候,要调用equals方法,因为equals方法已经被重写了,所以调用public boolean equals(Object obj),然后执行到if语句就不清楚怎么执行了。
  • 6 回答
  • 0 关注
  • 1933 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信