hashCodeメソッドとequalsメソッドを上書きする簡単な例プログラムについて
1807 ワード
import java.util.*;
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age = age;
}
public int hashCode(){
return this.name.hashCode()+this.age*1000;
}
public boolean equals(Object obj){
Person p = (Person)obj;
if(p.name.equals(this.name)&&p.age==this.age){
return true;
}else{
return false;
}
}
public String toString(){
return " :"+this.name+", :"+this.age;
}
}
public class TestHashCodeAndEquals{
public static void main(String args[]){
Map m = new HashMap();
//m.put(" ",new Person(" ",30));
//System.out.println(m.get(" "));
// : : , :30
// hashCode equals
//m.put(new Person(" ",30)," ");
//System.out.println(m.get(new Person(" ",30)));
// :null
//Person p = new Person(" ",30);
//m.put(p," ");
//System.out.println(m.get(p));
// :
// hashCode equals
m.put(new Person(" ",30)," ");
System.out.println(m.get(new Person(" ",30)));
// :
}
}
簡単な理解:
上書きする前に2回new Person(...、...)オブジェクトのhashCodeが異なり、上書き後2回new Person(…,…)オブジェクトのhashCodeは同じです.メモリに1つあるかどうか分かりません.テスト:
Person p1=new Person(" ",30);
Person p2=new Person(" ",30);
System.out.println(p1==p2);
System.out.println(p1.equals(p2));
出力:
false
true
メモリにはまだ2つのオブジェクトがあるはずです~~前に誤額が理解されました.