请按照下面的代码,如果两个对象有相同的hashCode和平等资格平等,比他们为什么失败==
String s1 = "ABC";
String s2 = new String("ABC");
String s3 = "ABC";
System.out.println(s1.hashCode()); // 64578
System.out.println(s2.hashCode()); // 64578
System.out.println(" s1 == s2 "+(s1 == s2)); // s1 == s2 false
System.out.println(" s1 == s3 "+(s1 == s3)); // s1 == s3 true
在这里,无论是字符串S1和S2具有相同的哈希码,并通过平等资格,但通过==失败,为什么?
是因为S1和S2是不同的对象,虽然两者都具有相同的哈希码和eqauls qalify,如果是怎么来的,请给我解释一下?
另外,请看看下面的例子中,
class Employee{
private Integer employeeCode;
Employee(Integer empCode){
this.employeeCode = empCode;
}
@Override
public int hashCode(){
return this.employeeCode * 21;
}
public boolean equals(Object o){
Employee emp = (Employee) o;
return this.employeeCode.equals(emp.employeeCode);
}
}
public class HashCodePractise01{
public static void main(String [] args){
Employee e1 = new Employee(1);
Employee e2 = new Employee(1);
System.out.println(e1.hashCode()); // 21
System.out.println(e2.hashCode()); // 21
System.out.println("e1.equals(e2) "+(e1.equals(e2))); // e1.equals(e2) true
System.out.println("e1 == e2 "+(e1 == e2)); // e1 == e2 false
}
}
在上面的例子中,也都Employee对象具有相同的哈希码和.equals方法资格平等,但他们仍然无法在==平等。
在上述两种情况下,他们为什么两个不同的对象?请解释在Java中
因为“==”检查它们在存储器位置方面相等。他们是不同的内存明智的,但通过实施哈希码,等于你说你希望他们在语义的方式相同。 – SklogW