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
我的问题是,如果哈希码 相同,str1 == str3会返回 false ? 我想知道==运算符和哈希码的内部工作
答案 0 :(得分:5)
如果我们声明String str1 =“hello”,则已在SCP(字符串内容池)中分配了对象,但由于运行时操作(str3 = str2 +“o”),str3的内存将在堆中分配。因此,即使hashcode是str1和str3的变量的相同内容也会在不同的地方。所以,==总是检查引用,并在String类equals()中检查内容。
答案 1 :(得分:0)
不使用“==”符号表示字符串类型的条件语句, 你应该使用“.equals”
尝试
System.out.println(str1.equals(str3));
有关详细信息,请参阅https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)
为了解释Java中的“==”运算符,对于字符串类型,这将通过“按引用调用”比较内容的地址,而.equals比较地址的内容。
对于使用“==”的int,float等类型,它将值与“按值调用”进行比较
答案 2 :(得分:0)
只有当两个对象引用同一个实例时,==运算符才为真。
equas方法比较值而不是引用。 在任何对象中,您都可以自己使用此方法并实现对象的质量意味着什么。 覆盖equlas方法时,您也应该覆盖哈希码方法。 散列码用于加速在数组中特意比较对象 如果两个对象中的哈希码不同,则不需要调用equals。 但是,如果哈希码相同,则不是100%的对象是相等的!