SSCCE:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
以上输出:
[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)
Run Code Online (Sandbox Code Playgroud)
异常类继承了它的equals()方法Object并且不会覆盖它。您每次都会创建新的 Exception 实例,它们是内存中的不同对象。即使它们的堆栈跟踪相同,它们在内存中仍然具有不同的对象分配,并且使用默认的 equals() 方法,它们也不相同。
但是,您可以定义自定义异常类并覆盖equals().
| 归档时间: |
|
| 查看次数: |
7558 次 |
| 最近记录: |