java - 为什么java相同的字符串有不同的哈希码

标签 java string classloader

我有一个类:

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

您获得不同哈希码的原因

  1. 有一些你看不到的特殊字符。你可以 通过复制 hexed.it 中的文本来识别

  2. 一个文件存储为 UTF8,另一个文件存储为 CP1652 或其他编码。

关于java - 为什么java相同的字符串有不同的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52370532/

相关文章:

Java toString() 打印问题

java - 应用程序部署在unix环境下的JBoss中时如何实现Spring LDAP身份验证?

c - 从结构数组中删除;s

Google Chrome 用于字符串搜索的算法?

java - 为什么这个 lambda 函数在错误的类加载器中启动类加载?

java - 当参数为 null 作为参数时

java - IntelliJ编译问题,java找不到符号但提供其位置?

arrays - GoLang 字符串为空

java - 为什么Java Classloader不释放jar

java - 由于不同的类加载器,在同一个耳朵中从两个不同的 war 中加载相同的类时出现 ClassCastException