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 ;
}
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){}
IMOOCER_Vi
TA贡献7条经验 获得超4个赞
好像说的不是很清楚,再说一下吧,你在自己重写的equals方法中随意加一个输出语句,然后运行以后不就可以判断出来了吗。我运行以后的结果证明调用的是重写以后的equals方法
添加回答
举报
0/150
提交
取消