「小马哥每日一问」2019.07.10 期

mercyblitz · 7月11日

问题描述

public class Name {
    private String first, last;

    public Name(String first, String last) {
        if (first == null || last == null)
            throw new NullPointerException();
        this.first = first;
        this.last = last;
    }

    public boolean equals(Name o) {
        return first.equals(o.first) && last.equals(o.last);
    }

    public int hashCode() {
        return 31 * first.hashCode() + last.hashCode();
    }

    public static void main(String[] args) {
        Set s = new HashSet();
        s.add(new Name("Mickey", "Mouse"));
        System.out.println(s.contains(new Name("Mickey", "Mouse")));
    }
}

以上程序输出内容是?

(a) true
(b) false
(c) 程序编译错误
(d) 以上都不是

注:每期的「小马哥每日一问」将累计在直播中解答
3 条评论
sansyou · 7月11日

equals 方法的参数是Object 没有被重写。返回false

回复

Moon · 7月11日

小马哥有点厉害啊,这么极端的题都能出来?
这个答案是false,因为
public boolean equals(Name o) {

    return first.equals(o.first) && last.equals(o.last);
}

并不是真正重载了Object的equals方法,Object的equals方法是:
public boolean equals(Object o) {
}

Set集合判断的存在的条件和顺序是:
1.必须hash值相等
2.内存地址一致 或 equals方法返回true

+1 回复

0

写错了,应该是重写

Moon · 7月13日
载入中...