gpt4 book ai didi

java - 了解 equals-实现 : type-check and THEN type-cast

转载 作者:行者123 更新时间:2023-12-02 18:03:41 24 4
gpt4 key购买 nike

为什么要检查对象的类型,然后通过类型转换创建新对象?

有人可以提供一个例子,为什么要以所示的方式完成吗?

请查看我在代码片段中的评论。

 @Override
public boolean equals(Object o) {
if (o == this) {
return true;
}

// After this check I know for sure that the object is an instance of Complex.
if (!(o instanceof Complex)) {
return false;
}

// Why is this cast necessary? I know (already) that is of type Complex. So I has all members Complex has.
Complex c = (Complex) o;

return Double.compare(re, c.re) == 0
&& Double.compare(im, c.im) == 0;
}

最佳答案

为了明确你的问题,你问两件事:为什么检查对象的类型,然后通过类型转换创建一个新对象?

类型转换后不会创建新对象。要创建新对象,您必须在 Java 中使用 new 关键字。在您的行中没有:

复数 c = (复数) o;

在这种情况下,您只需将一个类转换为另一个类即可。您无需更改对象,只是 Java 编译器知道您正在使用另一个类。

第二个问题在您的评论中,与以下内容相关:为什么需要进行此转换?我(已经)知道它属于复杂类型。所以我拥有 Complex 的所有成员

是的,在旧版本的 Java 中,您需要像以前一样进行额外的转换。

从 Java 14 开始,您可以将 instanceof 和强制类型转换结合在一起。欲了解更多信息,请看这里:

https://openjdk.org/jeps/305

根据规范,这是设计:

if (obj instanceof String s) {
// can use s here
} else {
// can't use s here
}

关于java - 了解 equals-实现 : type-check and THEN type-cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73782892/

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