gpt4 book ai didi

java - 为什么 && 会返回并强制转换?

转载 作者:行者123 更新时间:2023-12-02 09:00:02 25 4
gpt4 key购买 nike

我正在看核心 Java 书,平等测试部分让我有点困惑

  1. 这个特定返回行的含义是什么,尤其是 &&
  2. 为什么需要强制转换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)

这意味着otherObject是一个Object(根据Object.equals(Object)的要求)。您需要进行强制转换来告诉编译器在运行时otherObject 一个Employee(或者抛出一个类强制转换异常)。

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

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

可以安全地推断 otherObjectEmployee,很遗憾地通知您,Java(当前)没有进行任何此类推断。编译器没有感知能力(尽管有时看起来很像)。

关于java - 为什么 && 会返回并强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60237133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com