gpt4 book ai didi

java - 在 Java 中重写等于 - 对实现感到困惑

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

我一直在学习 MOOC Java 编程类(class),他们通常会像这样重写 equals:

  1. 如果 2 个对象的地址相同 = 返回 true。
  2. 如果比较的对象不是与第一个对象相同的类的实例 = 返回 false。
  3. 将对象转换为与比较对象相同的类型
  4. 比较每个对象的变量——返回真或假

我对第 2 步和第 3 步有点困惑。

  • 第 2 步检查第二个对象是否是与其比较对象相同类型的实例...

如果不是,该方法将忽略其余代码并返回 false

如果是,我们将其转换为该类。 所以在这一点上我很困惑,为什么我们需要将一个已经是同一个类的实例的对象转换为那个类?如果 Java 识别它是同一个类型,你为什么要需要转换吗?

*示例如下:

public boolean equals(Object comparedObject) { 
// if the variables are located in the same place, they're the same
if (this == comparedObject) {
return true;
}

// if comparedObject is not of type Book, the objects aren't the same **
if (!(comparedObject instanceof Book)) {
return false;
}
// convert the object to a Book object
Book comparedBook = (Book) comparedObject;**

// if the instance variables of the objects are the same, so are the objects
if (this.name.equals(comparedBook.name) &&
this.published == comparedBook.published &&
this.content.equals(comparedBook.content)) {
return true;
}

// otherwise, the objects aren't the same
return false;
}

最佳答案

因为你只比较了动态类型; comparedObjectstatic 类型没有改变:它是 Object,你不能访问它的 Book 成员(想一想: 此时知道comparedObject 的动态类型是Book;但是Java 编译器仍然看到它及其声明的类型)。要让编译器理解对象类型是Book,首先需要创建一个对象,其static类型是Book,为此你需要一个类型转换。

静态类型信息是 Java 编译器看到的,也是编译器用来检查您的代码是否静态正确的信息。

关于java - 在 Java 中重写等于 - 对实现感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71697598/

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