gpt4 book ai didi

java - 为什么我不能比较 Exception 对象的相等性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:36 25 4
gpt4 key购买 nike

中南合作:

import java.util.Objects;
public class FooMain {

private static Exception foo() {
try {
throw new Exception();
} catch (Exception e) {
return e;
}
}


public static void main(String args[]) {
final int N = 2;
Exception es[] = new Exception[N];
for (int i = 0 ; i < N ; i++)
es[i] = foo();
System.out.printf("Exceptions are equal? %b\n", Objects.equals(es[0], es[1]));
for (int i = 0 ; i < N ; i++) {
System.out.printf("follows exception %d:\n", i);
es[i].printStackTrace();
}
}
}

以上输出:

 [java] Exceptions are equal? false
[java] follows exception 0:
[java] follows exception 1:
[java] java.lang.Exception
[java] at FooMain.foo(FooMain.java:6)
[java] at FooMain.main(FooMain.java:17)
[java] java.lang.Exception
[java] at FooMain.foo(FooMain.java:6)
[java] at FooMain.main(FooMain.java:17)

最佳答案

Exception 类从 Object 继承了它的 equals() 方法并且没有覆盖它。您每次都创建新的 Exception 实例,它们是内存中的不同对象。即使它们的堆栈跟踪相同,它们在内存中的对象分配仍然不同,并且使用默认的 equals() 方法时,它们并不相同。

但是,您可以定义自定义异常类并覆盖 equals()

关于java - 为什么我不能比较 Exception 对象的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24596941/

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