hascode()和==运算符契约与给定的例子?

Aru*_*gar -2 java

        String str1="hello";
        String str2="hell";
        String str3=str2+"o";

        System.out.println(str1==str3); // fasle
        System.out.println(str1.hashCode()); // 99162322
        System.out.println(str2.hashCode()); // 3198781
        System.out.println(str3.hashCode()); // 99162322
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么STR1 == STR3返回,如果有哈希码相同的?我想知道==运算符和哈希码的internaly工作

Mic*_*tel 5

如果我们声明String str1 ="hello",则对象已在SCP(字符串内容池)中分配,但由于运行时操作(str3 = str2 +"o"),str3的内存将在堆中分配.因此,即使hashcode是str1和str3的变量的相同内容也会在不同的地方.所以,==总是检查引用,并在String类equals()中检查内容.