【java】「小马哥每日一问」2019.07.10 期

问题描述

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) 以上都不是

注:每期的「小马哥每日一问」将累计在「小马哥技术周报」 直播中解答

回答

false, 应该是hashcode 判断的结果是相等,因为没有重写equals()方法,走的是Object的equals(),和 == 一样。比较的是地址值。故不相等但是如果将代码修改为这个就是true
【java】「小马哥每日一问」2019.07.10 期

选b false
因为没有重写equals方法
将equals方法改为
@Override
public boolean equals(Object obj) {

Name name = (Name) obj;

return first.equals(name.first) && last.equals(name.last);

}
即可为true

选 (b) false, 没有重写equals()方法,contains调用的是Object的equals()方法。

输出false ,没有重写equal

惭愧。。。最开始以为是true,后来测试了下才发现equals方法入参应该是Object,这里是Name...所以结果是false。但是为什么没进重载???没想通啊

false,override equals方法参数是object

equals上加个@Override,Name对象通过强转。

false

false

contains方法内部调用的是Object.equals

false,没有重写equals方法,只是重载了

学习了,牛逼

false

false
因为没有重写Object的equals方法

没看见@Override

留下足迹......

以上是 【java】「小马哥每日一问」2019.07.10 期 的全部内容, 来源链接: utcz.com/a/74216.html

回到顶部