Почему Java String имеет другой хэш-код - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть класс:

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();
    }
}

выход: * +1010 *

250218913

1111280555

Вопрос: почему это случилось? Я думаю, что строка "饕餮 ABCDEFG" имеет тот же адрес, потому что постоянный пул. введите описание изображения здесь

1 Ответ

0 голосов
/ 17 сентября 2018

Вывод программы дал мне тот же хэш-код.

  • 1111280555
  • 1111280555

Причина (ы), почему вы получаете другой хэш-код

  1. Существуют специальные символы, которые вы не видите.Вы можете идентифицировать, скопировав текст в hexed.it

  2. Один файл сохраняется как UTF8, а другой - как CP1652 или другая кодировка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...