DESKTOP-F6K5GEP_20200903-崔婧涓

一、问题

今天的作业中使用 【匿名类】实现 比较器接口 ,以便于按照 Customer 的 birthdate 升序排序

    // 使用 【匿名类】实现 比较器接口 ,以便于按照 Customer 的 birthdate 升序排序
    Comparator<Customer> comparator = new Comparator<Customer>(){
        @Override
        public int compare(Customer o1, Customer o2) {
            if(o1.getBirthdate().isAfter(o2.getBirthdate())) {
                return -1;
            }else if(o1.getBirthdate().equals(o2.getBirthdate()) ) {
                return 0;
            }else {
            return 1;
            }
        }
    };

1、为什么“ o1.getBirthdate().isAfter(o2.getBirthdate()) ”不能用 “ > ” 运算符计算?

2、这里的 equals()== 的效果是否一样?

解决

1、因为Birthdate的实例中存了三个字段(year, month, dayofmonth),==不能一次比较三个数,所以要用java.time.LocalDate中提供的isAfter()方法来比较日期的先后顺序。

2、另外.equals()方法与运算符的效果是一样的,因为没有自己重写equals()方法,equals是来自Object自带的用运算符来计算的方法。

equals()方法如下:

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj instanceof LocalDate) {
        return compareTo0((LocalDate) obj) == 0;
    }
    return false;
}

二、吐槽

今天讲课的节奏很好,有时间来消化之前留下的问题了,就是晚上自习的时候不知道怎么去复习。