gpt4 book ai didi

java - Java equals() 和 C++ 运算符 == 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 16:03:00 30 4
gpt4 key购买 nike

a question regarding the use of typeid是C++,我建议它可以用来比较对象比较中的类型。我没看到它做了多少,但我记住了 Java 的 equals

Looking into Java a bit more , 这似乎是这样的:Some say应该比较两个对象的实际类,并且 some say instanceof 是正确的工具,可能需要双重分派(dispatch)。当然,在某些情况下,两者之一绝对更合适,但至少 both options are considered .

在 C++ 中,OTOH,我几乎找不到比较实际类型的代码。在大多数情况下,使用双重分派(dispatch)(使用 dynamic_cast),我找不到任何人坚持在相等性检查开始时进行快速类型比较是正确的做法。

我想知道为什么多态类型比较问题在 Java 中有两个可接受的解决方案,而在 C++ 中似乎只有一个被认为是最佳实践?是否存在显着的技术差异,或者只是不同的方法?

注意:我的说法是基于印象,而非具体知识。如果它们是错误的,并且 Java 和 C++ 在这方面确实相似 - 或者由于上述以外的原因而不同,那么这显然是一个可以接受的答案。

最佳答案

在Java中,所有类型最终都派生自Object,而Object定义了一个虚函数Object.equals(Object other),所以你可以将任何东西与其他任何东西进行比较,无论是否这是否有意义。在 C++ 中,没有通用的基础,并且== 没有隐式定义。 == 通常只是在有意义时被重写,用于比较同类型,乱写编译器会报错代码。在存在继承层次结构的情况下,它是,当然,由作者决定 == 是否有意义(我通常不这样做,但也有很多异常(exception)),如果那么,关于比较对象的含义应该是什么不同种类。在层次结构之内或之外:它在 BigInteger 和之间支持 == 可能有意义BigFloat,例如,即使这些类与继承。

您在 C++ 中看不到讨论太多的原因是,当然,因为你不定义 == 除非有一些它的逻辑意义,然后你根据逻辑意义。在 Java 中,您通常必须定义 equals无论如何,所以你必须“发明”一些意义,然后你就会得到讨论发明的意义应该是什么。

关于java - Java equals() 和 C++ 运算符 == 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767423/

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