public class Test {
public static void main(String[] args){
Time time = new Time(2022,4,27);
System.out.println(time.toString()); //这里可以直接写System.out.println(time);
Time t1 = new Time(2022,1,1);
Time t2 = new Time(2022,1,1);
System.out.println(t1.equals(t2)); //输出true
Time t3 = new Time(2022,1,3);
System.out.println(t2.equals(t3)); //输出false
}
}
class Time{
int year;
int month;
int day;
public Time(){}
public Time(int year,int month,int day){
this.year = year;
this.month = month;
this .day = day;
}
public String toString(){
return year +"年"+month +"月"+ day +"日";
}
/** public boolean equals(Object obj){ //这样子重写效率低,看改良版
//获取第一个日期的数据 t1.equals(t2)这里的t1是第一个数据,t2是第二个数据
// t2第二个数据需要向下转型判断,t1t2对象名不是固定的
// equals(obj)括号中的值为obj
int year1 = this.year;
int month1 = this.month;
int day1 = this.day;
//获取第二个日期的数据
if(obj instanceof Time){
Time t = (Time)obj;
int year2 = t.year;
int monthh2 = t.month;
int day2 = t.day;
if(year1 == year2 && month1 == monthh2 && day1 == day2){
return true;
}
}
return false;
}
*/
//改良版
public boolean equals(Object obj){
if(obj == null || !(obj instanceof Time)){//如果obj为空 或者 obj不是Time,直接返回false
return false;
}
if(this == obj){
return true;
}
Time t = (Time)obj; //这里直接转型,因为前面已经判断过obj了
return this.year == t.year && this.month == t.month && this.day == t.day; //&&为短路与,全相等输出true,反之输出false
}
}