gpt4 book ai didi

java - 为什么 Java 中的异常类不实现 equals 方法?

转载 作者:行者123 更新时间:2023-12-03 23:16:59 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




为什么要Exception类(如 RuntimeException )未实现 equals()方法?

例如,output此代码为 false :

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
final RuntimeException e1 = new RuntimeException("e");
final RuntimeException e2 = new RuntimeException("e");
System.out.println(e1.equals(e2));
}
}

有什么原因 equals()没有执行?在我看来这将是相当有用的。

编辑:让我扩展一下这个问题,因为似乎大多数人相信 equals()实现不会有用。

我想知道,为什么 Exceptions 应该与普通对象不同地对待,并且只有在它的相同实例时才匹配。它是否没有足够的关于自身的信息来与其他对象进行比较。例如,底层证券 StackTraceElement ,我假设它存储调用堆栈,已经实现了 equals方法。

异常的定义中是否有某些内容阻止它们基于其属性实现 equals 方法?

最佳答案

有一个简单的解释:Exception 的两个不同实例决不相等。

异常(exception)的平等是什么意思?如果两个对象相等,则它们在某种意义上在语义上是相同的。但是 Exception 的两个实例在语义上总是不同的 - 异常发生在另一个地方(即堆栈跟踪不同),或者最有可能发生在另一个时间,即在不同的情况下。
Exception 的两个不同实例s 永远不应该相等,仅仅因为它们不能代表同一件事。

关于java - 为什么 Java 中的异常类不实现 equals 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372385/

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