public class Test{
private int year;
private int month;
private int day;
public Test() {
}
public Test(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public static void main(String[] arg) {
Test test = new Test(1997,4,28);
Test test1 = new Test(1997,4,28);
Test test2 = new Test(1999,4,28);
System.out.println(test.equals(test1));
System.out.println(test.equals(test2));
System.out.println(test.equals(test1));
}
/* public boolean equals(Object obj){
return this==obj;
}*/
/* public boolean equals(Object obj){
int year1=this.year;
int month1 =this.month;
int day1 =this.day;
if(obj instanceof Test){
Test test2= (Test) obj;
int year2=test2.year;
int month2=test2.month;
int day2=test2.day;
if(year1==year2&&month1==month2&&day1==day2) {
return true;
}
}
return false;
}*/
}
如果我们自己不重写从Object类中继承的equals()而是直接使用此时此方法比较的是两个对象的内存地址是否相同,很显然两个对象的内存地址是不会相同的所以说一定会返回false;
public class Test{
private int year;
private int month;
private int day;
public Test() {
}
public Test(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public static void main(String[] arg) {
Test test = new Test(1997,4,28);
Test test1 = new Test(1997,4,28);
Test test2 = new Test(1999,4,28);
System.out.println(test.equals(test1));
System.out.println(test.equals(test2));
System.out.println(test.equals(test1));
}
/* public boolean equals(Object obj){
return this==obj;
}*/
public boolean equals(Object obj){
int year1=this.year;
int month1 =this.month;
int day1 =this.day;
if(obj instanceof Test){
//如果不是相同类型的对象根本就不会出现
//相等这种情况
Test test2= (Test) obj;//强转之后我们才可以比较两个对象是否相等
int year2=test2.year;
int month2=test2.month;
int day2=test2.day;
if(year1==year2&&month1==month2&&day1==day2) {
return true;
}
}
return false;
}
}
当我们重写了从object继承的equals方法后我们就可以真正的比较两个对象是否相同了,此时才会有返回true的可能,不重写是不会存在true这种情况的,因为两个对象的内存地址是不可能相同的。
equals方法改良
最终equals最简化版