为什么getStackTrace()在这个Java代码中返回不同的地址?
我有以下简单的java代码:为什么getStackTrace()在这个Java代码中返回不同的地址?,java,stack-trace,Java,Stack Trace,我有以下简单的java代码: try { - ProcessBuilder pb = new ProcessBuilder("TheBatchFile.bat", "Argument1", "Argument2"); pb.directory(new File("/path/to/working/dir")); Process p = pb.start(); p.waitFor(); } catch ( IOException e) { System.
try { -
ProcessBuilder pb = new ProcessBuilder("TheBatchFile.bat", "Argument1", "Argument2");
pb.directory(new File("/path/to/working/dir"));
Process p = pb.start();
p.waitFor();
} catch ( IOException e) {
System.out.println(Thread.currentThread().getStackTrace());
System.out.println("Heres some line");
System.out.println(e.getStackTrace() ) ;
System.out.println (" Print-Statement After StackTrace");
}
然后,当我连续运行它两次时,它将返回不同的结果。以下是输出:
[Ljava.lang.StackTraceElement;@fe64b9
Heres some line
[Ljava.lang.StackTraceElement;@186db54
Print-Statement After StackTrace
我很好奇这里发生了什么-为什么即使我已经编译了它,并且运行了相同的代码,它仍然会为getStackTrace()
提供不同的结果getStackTrace()
方法在Throwable
类(所有异常
的超类)中定义为:
因此,每次调用它时(无论是使用
Exception\getStackTrace()
还是使用Thread\getStackTrace()
),它最终都会返回一个新对象。因此,需要打印一个新的哈希代码。Thread.currentThread().getStackTrace()
和e.getStackTrace()
引用不同的对象或动态生成,因此它们保存在不同的内存地址(甚至可能包含不同的信息?),这是最简单的解释。这些不是“地址”,它们是对象的标识散列,或多或少是一个随机值哦,fe64b9
和186db54
不是e.getStrackTrace()
和Thread.currentThread().getStackTrace()的内存地址
object?然后我收回我的评论。@MaximilianGerhardt…不要在这里发布文本图像。完全浪费您的时间和带宽。发布文本。您不需要对堆栈跟踪进行拍照。
public StackTraceElement[] getStackTrace() {
return getOurStackTrace().clone();
}