为什么 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一个新的对象。因此,预计将打印一个新的哈希码。
我有以下简单的 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一个新的对象。因此,预计将打印一个新的哈希码。