gpt4 book ai didi

java - StackTraceElement 数组的哈希码每次返回不同的值

转载 作者:行者123 更新时间:2023-11-30 07:40:56 25 4
gpt4 key购买 nike

public static void main(String[] args) {
try{
throw new RuntimeException();
}
catch (Exception e){
System.out.println(e.getStackTrace());
System.out.println(e.getStackTrace());
System.out.println(e.getStackTrace());
}
String[] sArray = new String[]{"a","b"};
System.out.println(sArray);
System.out.println(sArray);
System.out.println(sArray);
}

上述程序返回以下输出:

[Ljava.lang.StackTraceElement;@50040f0c
[Ljava.lang.StackTraceElement;@2dda6444
[Ljava.lang.StackTraceElement;@5e9f23b4
[Ljava.lang.String;@4783da3f
[Ljava.lang.String;@4783da3f
[Ljava.lang.String;@4783da3f

谁能解释一下为什么 StackTraceElement[] 的哈希码(toString() 输出的最后 8 个字符)每次都返回不同的结果,因为数组没有改变?

String[] 也没有改变。

最佳答案

它每次都创建一个新数组。例如

public class TestClass{    
public static void main(String[] args) {
try{
throw new RuntimeException();
}
catch (Exception e){
System.out.println(e.getStackTrace());
System.out.println(e.getStackTrace());
System.out.println(e.getStackTrace());
}


System.out.println(new String[]{"a","b"});
System.out.println(new String[]{"a","b"});
System.out.println(new String[]{"a","b"});
}
}

虽然数组的内容没有改变,但是创建了一个新的数组object,这就是数组hashCode() 的重要性方法。

试试看下面的数组项没有改变:

    try{
throw new RuntimeException();
}
catch (Exception e){
System.out.println(Arrays.hashCode(e.getStackTrace()));
System.out.println(Arrays.hashCode(e.getStackTrace()));
System.out.println(Arrays.hashCode(e.getStackTrace()));
}

关于java - StackTraceElement 数组的哈希码每次返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56795223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com