package com.API;
import java.util.ArrayList;
//boolean equals(Object obj)
//使用==来比较两个对象是否相等,实际上比较的是地址是否相等
public class EqualsDemo {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);//p1地址com.API.Person@305fd85d
Person p2 = new Person("张三", 18);//p2地址com.API.Person@1877ab81
boolean flag = p1.equals(p2);
System.out.println(flag);
//给定的对象表示的String与另外一个相同,则返回true
System.out.println(p1.name.equals(p2.name));
String n = "a";
String n1 = "a";
System.out.println(n.equals(n1));
//判断判断两个对象的运行类是否相同类this.getClass() != obj.getClass()
boolean flag1 = p1.equals(new ArrayList());
System.out.println(flag1);
}
}
class Person {
String name;
int age;
@Override
public boolean equals(Object obj) {
//地址相同直接返回true
if (this == obj)
return true;
if (obj == null)
return false;
//比较对象的运行的类,保持健壮性
if (getClass() != obj.getClass())
return false;
//向下转型 把obj类转化为Person类然后就可以获取它的成员变量
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;
}
/*
* //重写一下equals实现地址相等返回true,参数相同也返回true
@Override
public boolean equals(Object obj) {
//this指的是当前对象
//表示地址相同
if (this == obj) {
return true;
}
//保持一个健壮性 判断两个类是否相同
if (this.getClass() != obj.getClass()) {
return false;
}
//向下转型转化为person类
Person p = (Person) obj;
if (!this.name.equals(p.name)) {
return false;
}
if (this.age != p.age) {
return false;
}
return true;
} */
public Person(String name, int age) {
super();
this.age = age;
this.name = name;
}
}