Closed. This question needs to be more focused。它当前不接受答案。
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2个月前关闭。
我在看Java核心书,而相等性测试部分使我有些困惑
该特定返回线的含义是什么,尤其是对于
为什么当已经知道
(请注意,原始文件不涉及分支机构)。至于为什么需要将
这意味着
如果您希望编译器在“知道”之后
可以安全地推断
想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
2个月前关闭。
我在看Java核心书,而相等性测试部分使我有些困惑
该特定返回线的含义是什么,尤其是对于
&&
为什么当已经知道
otherObject
是否属于同一类时,为什么需要将强制转换为Employee?class Employee
{
...
public boolean equals(Object otherObject)
{
// a quick test to see if the objects are identical
if (this == otherObject) return true;
// must return false if the explicit parameter is null
if (otherObject == null) return false;
// if the classes don't match, they can't be equal
if (getClass() != otherObject.getClass())
return false;
// now we know otherObject is a non-null Employee
Employee other = (Employee) otherObject;
// test whether the fields have identical values
return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}
}
最佳答案
这是一个逻辑上的短路和运算符。这是一种较短(更快)的书写方式
if (name.equals(other.name)) {
if (salary == other.salary) {
return hireDay.equals(other.hireDay);
}
}
return false;
(请注意,原始文件不涉及分支机构)。至于为什么需要将
otherObject
转换为Employee
的原因;正是因为它不知道otherObject
是Employee
-实际上,您有public boolean equals(Object otherObject)
这意味着
otherObject
是Object
(Object.equals(Object)
要求)。您需要进行强制转换,以告知编译器在运行时otherObject
是Employee
(或引发类强制转换异常)。如果您希望编译器在“知道”之后
// if the classes don't match, they can't be equal
if (getClass() != otherObject.getClass())
return false;
可以安全地推断
otherObject
是Employee
,很抱歉通知您,Java(当前)未进行任何此类推断。编译器不是有感觉的(尽管有时看起来像)。10-06 09:06