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