hashCode()在java中的行为

Sou*_*Bag -3 java

今天我正在尝试下面的代码,并期望sysout的输出不同.

public class StringDemo {


    public static void main(String[] args) {
        String s1 = new String("Hi");
        String s2 = new String("Hi");       
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
    }

}
Run Code Online (Sandbox Code Playgroud)

但我得到了同样的价值.任何人都可以解释一下这件事是如何运作的吗?

谢谢,Sourav

Tom*_*icz 5

String有自己的实施hashCode()(谢天谢地),这是基于的内容String.如果你有两个相同的字符串(无论它们是如何创建的),那么你最终会得到同样的结果hashCode().

下面是实施String.hashCode()从JDK 7(简化):

public int hashCode() {
    int off = offset;
    char val[] = value;
    int len = count;

     for (int i = 0; i < len; i++) {
         h = 31*h + val[off++];
    }
    return h;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它完全基于内容String.