Closed. This question needs to be more focused。它当前不接受答案。
                        
                    
                
            
        
            
        
                
                    
                
            
                
                    想改善这个问题吗?更新问题,使其仅通过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的原因;正是因为它不知道otherObjectEmployee-实际上,您有

public boolean equals(Object otherObject)


这意味着otherObjectObjectObject.equals(Object)要求)。您需要进行强制转换,以告知编译器在运行时otherObjectEmployee(或引发类强制转换异常)。

如果您希望编译器在“知道”之后

// if the classes don't match, they can't be equal
if (getClass() != otherObject.getClass())
   return false;


可以安全地推断otherObjectEmployee,很抱歉通知您,Java(当前)未进行任何此类推断。编译器不是有感觉的(尽管有时看起来像)。

10-06 09:06