StackTraceElement 数组的哈希码 returns 每次都有不同的值
StackTraceElement Array's hashcode returns different value each time
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);
}
以上程序return输出如下:
[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 个字符)return 每次都不一样,因为数组没有得到改变了吗?
对于 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()));
}
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);
}
以上程序return输出如下:
[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 个字符)return 每次都不一样,因为数组没有得到改变了吗?
对于 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()));
}