繁体   English   中英

为什么Java相同的String具有不同的哈希码

[英]Why a java same String has different hashcode

我有一堂课:

package com.test;
public class TestA {
    public static final String TEST = "饕餮ABCDEFG";

    public TestA() {
        System.out.println(TEST.hashCode());
    }
}

相同的类(不带包,将其放入E:,javac Test.java,获取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”具有相同的地址,因为常量池。 在此处输入图片说明

程序输出为我提供了相同的哈希码。

  • 1111280555
  • 1111280555

您获得不同哈希码的原因

  1. 有一些看不见的特殊字符。 您可以通过复制hexed.it中的文本进行识别

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM