public class Application {
public static void main(String[] args) {
//Object 是所有类的父类,定义了所有类共有的一组方法
//toString 方法的返回值决定了输出对象的内容
//默认是输出了对象的内存地址转化后的结构
//重写toString 方法可以输出对象的属性值
Employee e1 = new Employee("zhangsan",20);
System.out.println(e1);
//hashCode 方法返回了对象的唯一标识(身份证号)
System.out.println(e1.hashCode());
//equals 方法默认进行地址比较,如果想要进行 值 的比较需要重写
Employee e2 = new Employee("wangwu",40);
Employee e3 = new Employee("wangwu",40);
System.out.println(e2.equals(e3));
//重写equals 后 必须重写hashCode,通常返回某个字符串属性的hashCode
//保证equals 相同的对象 hashCode 也相同
}
}
任何类默认都是继承Object
//默认继承自 Object
public class Employee {
private String name;
private int age;
public Employee() {
super();
}
public Employee(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "Employee:[name:" + name +",age:" + age + "]";
}
@Override
public boolean equals(Object arg0) {
// 重写这个方法完成值的比较 e2 = this,e3 = obj(arg0)
//1、判断obj 是不是 Employee 的对象
// 如果是,进行后续属性值的比较
// 如果不是,返回false,表示两者不相等
// 因为 obj是Object 类型,任何类的对象都可以传入进行比较
if (arg0 instanceof Employee) {
//instanceof 用来判断对象是否属于某个类
//2.属于则进行属性值的比较
//把obg从Oject 类型强制转换为Employee
//只有转换为Employee 后才能通过 getter方法获取属性的值
Employee another = (Employee)arg0;
//比较年龄
if (age == another.getAge()) {
//年龄相同,比较名字
if (name.equals(another.getName())) {
//名字相同,返回return,表示两者相等
return true;
}else {
//名字不同,返回false,表示两者不相等
return false;
}
}else {
//年龄不同,返回false,表示两者不相等
}
}else{
//不属于则返回false,表示两者不相等
return false;
}
return false;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return name.hashCode();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}