我有一个类:
package com.test;
public class TestA {
public static final String TEST = "饕餮ABCDEFG";
public TestA() {
System.out.println(TEST.hashCode());
}
}
同一个类(没有包,放在E:, javac Test.java, get Test.class):
public class TestA {
public static final String TEST = "饕餮ABCDEFG";
public TestA() {
System.out.println(TEST.hashCode());
}
}
测试类:
package com.test;
import java.net.URL;
import java.net.URLClassLoader;
public class Test3 {
public static void main(String[] args) throws Exception {
URLClassLoader loaderA = new URLClassLoader(new URL[]{new URL("file:E:/")});
Class clazzA = loaderA.loadClass("TestA");
clazzA.newInstance();
TestA testA = new TestA();
}
}
输出:
250218913
1111280555
问题: 为什么会这样? 我认为字符串“饕餮ABCDEFG”与常量池具有相同的地址。 enter image description here
最佳答案
程序输出为我提供了相同的哈希码。
- 1111280555
- 1111280555
您获得不同哈希码的原因
有一些你看不到的特殊字符。你可以 通过复制 hexed.it 中的文本来识别
一个文件存储为 UTF8,另一个文件存储为 CP1652 或其他编码。
关于java - 为什么java相同的字符串有不同的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370532/