为什么 getStackTrace() return 此 Java 代码中的不同地址?

Why does getStackTrace() return different addresses in this Java code?

我有以下简单的 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");
}

然后当我 运行 它连续两次时,它会 return 不同的结果。这是输出:

[Ljava.lang.StackTraceElement;@fe64b9
Heres some line
[Ljava.lang.StackTraceElement;@186db54
 Print-Statement After StackTrace

我很好奇这里发生了什么 - 为什么会这样,即使我已经编译了它,而且我 运行 相同的代码,它仍然会为 [=14= 给出不同的结果]

getStackTrace() 方法在 Throwable class(所有 Exception 的超级class)中定义为:

public StackTraceElement[] getStackTrace() {
    return getOurStackTrace().clone();
}

所以每次调用(无论是使用Exception#getStackTrace()还是使用Thread#getStackTrace()),最终都会return一个新的对象。因此,预计将打印一个新的哈希码。