package com.atguigu.java;
public class Person {
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("人:吃饭");
}
public void walk() {
System.out.println("人:走路");
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
// public boolean equals(Object obj) {
// if (obj == this) {
// return true;
// }
//
// if (obj instanceof Person) {
// Person p = (Person) obj;
// return this.age == p.age && this.name.equals(p.name);
// }
//
// return false;
// }
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
//先用 == 直接判断两个对象地址是不是相同 如果相同 则说明两个对象指的是同一个内存
//两个对象是相等的 返回true
// this代表调用此方法(调用equals)的对象
if(this == obj)
return true;
// obj为空直接false
if(obj == null)
return false;
// 类不同也直接false
if(getClass() != obj.getClass())
return false;
Person other = (Person)obj;
if(age != other.age)
return false;
if(name == null){
if(other.name != null)
return false;
}else if (!name.equals(other.name)) {
return false;
}
return true;
}
第二种重写方式
public boolean equals(Object obj) {
// 先比较两个对象是不是指向同一个地址
// 指向同一个地址 那么肯定是相等的 直接返回true
if (obj == this) {
return true;
}
// 如果不是指向同一个地址
// 再判断obj是不是Person
// 如果不是Person类 那么就直接false
// instanceof :测试左边的对象是否是右边类或者该类的子类创建的实例对象,
// 是,则返回true,否则返回false。
if (obj instanceof Person) {
// 先强制转换一下
Person p = (Person) obj;
// 再去比较两个对象实体内容是否是相同的
return this.age == p.age && this.name.equals(p.name);
}
return false;
}