在Java equals中,为什么需要强制转换?

在Java equals中,为什么需要强制转换?,java,equals,Java,Equals,我编写了一个类来表示线性代数中的矩阵,并使用IntelliJ实现了equals() 在生成的代码中: @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) return false; Matrix matrix = (Matrix) o; // (*) for (int i=

我编写了一个类来表示线性代数中的矩阵,并使用IntelliJ实现了
equals()

在生成的代码中:

@Override
public boolean equals(Object o) {
    if (this == o) { return true; }
    if (o == null || getClass() != o.getClass()) return false;
    Matrix matrix = (Matrix) o;  // (*)

    for (int i=0; i<this.values.length; i++) {
        // compare entries
    }
    return true;
}
@覆盖
公共布尔等于(对象o){
如果(this==o){return true;}
如果(o==null | | getClass()!=o.getClass())返回false;
矩阵=(矩阵)o;/(*)

对于(int i=0;i到
矩阵的转换将在稍后的方法中完成,因此您可以访问其方法/成员并使用它们进行比较(基于您的逻辑)一个简单明了的答案是,在Java中,每个类默认扩展对象类。也就是说对象类是超类,矩阵这里是对象类的一个子类。一个简单的类比是,所有的狗都是动物,不是所有的动物都是狗。因此,分配inst你需要告诉的对象类的名称,它实际上是一个矩阵类。这就是该类被强制转换的原因。

类型强制转换对于“赋值”是必需的,但不是为了比较。

这就是在赋值语句中显式使用类型转换的原因

矩阵=(矩阵)o;

使用==的对象比较通过验证对被比较对象的引用是否相同来工作。仅比较引用不需要类型转换


但是,赋值语句需要为左侧的对象分配空间,以便它可以容纳右侧对象的所有值。为此,赋值语句中需要进行类型转换。

您将收到一个类型为
object
的参数,但如果您比较两个
矩阵
对象,则需要将对象向下转换为
Matrx
类型,以便能够访问其成员并检查两个对象在各个方面是否实际上相等,例如矩阵内容。