关于equals的问题。

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)方法呢。为什么 求详细解,头都整大了。

Beaten丶
浏览 1934回答 6
6回答

killer00go

if(!(obj instanceof Person)){ // 不是Person对象 System.out.println("不相等");//加一句代码进去就知道了 return false ; }

killer00go

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

IMOOCER_Vi

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

微凉一季

调用的是String的,因为你调用方法的对象是name这个string呀,你直接用per.equals就是调用你写的方法了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java