我有以下简单的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.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()
提供不同的结果
答案 0 :(得分:3)
getStackTrace()
方法在Throwable
类(所有Exception
的超类中)中定义为:
public StackTraceElement[] getStackTrace() {
return getOurStackTrace().clone();
}
因此,每次调用它(无论是使用Exception#getStackTrace()
还是使用Thread#getStackTrace()
),它最终都会返回一个新对象。因此,预计会打印一个新的哈希码。