Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么getStackTrace()在这个Java代码中返回不同的地址?_Java_Stack Trace - Fatal编程技术网

为什么getStackTrace()在这个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.

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

提供不同的结果
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();
}