我正在为我的 OCA 准备解决一些问题。我在 Oracle 的网站上发现了这个问题,列出了考试示例问题。
代码:
public class MyStuff {
MyStuff(String n) { name = n; }
String name;
public static void main(String[] args) {
MyStuff m1 = new MyStuff("guitar");
MyStuff m2 = new MyStuff("tv");
System.out.println(m2.equals(m1));
}
public boolean equals(Object o) {
MyStuff m = (MyStuff)o;
if(m.name != null) return true;
return false;
}
}
问题:
结果是什么?
- 输出为“真”并且 MyStuff 满足 Object.equals() 合同。
- 输出为“假”并且 MyStuff 满足 Object.equals() 合同。
- 输出为“真”并且 MyStuff 不履行 Object.equals() 合同。
- 输出为“假”并且 MyStuff 不履行 Object.equals() 合同。
- 编译失败。
- 运行时抛出异常。
答案是——
3. The output is "true" and MyStuff does NOT fulfill the Object.equals() contract.
我理解输出如何以及为什么是true
,但我没有得到的是它为什么不履行Object.equals()
合同,以及 Java 中的“合同”到底是什么,如果我们不遵守它怎么办?