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つのオブジェクトがあるはずです~~前に誤額が理解されました.