매개 변수가 Object가 아닌 equals() 메서드를 작성하면 오버라이드하지 않고 메서드가 오버로드됩니다.
이제 HashMap
- HashMap
과 같이 호출하면 키를 비교합니다. 비교되는 키의 유형은 Object
입니다. 따라서 Object
이 아닌 매개 변수를 사용하여 equals()
메서드를 정의하면이 메서드는 HashMap
에 의해 무시됩니다.
나는 다음과 같은 코드를 시도 : "발견"
public class SomeClass
{
int privateMember;
// note it's important to override hashCode, since if the hashCode of two
// keys is not the same, equals() won't be called at all
public int hashCode()
{
return privateMember;
}
public boolean equals (Object other)
{
if (other instanceof SomeClass) {
return this.privateMember==((SomeClass)other).privateMember;
}
else {
return false;
}
}
public static void main(String[] args)
{
HashMap<SomeClass,String> map = new HashMap<SomeClass,String>();
SomeClass s1 = new SomeClass();
SomeClass s2 = new SomeClass();
s1.priv=4;
s2.priv=4;
map.put (s1, "something");
if (map.containsKey (s2)) {
System.out.println ("found!");
} else {
System.out.println ("not found!");
}
}
}
이 코드 출력을. 당신이 동일한 코드를 실행하지만, 함께 equals
방법을 대체 할 경우
이제 :
public boolean equals (SomeClass other)
{
if (other instanceof SomeClass) {
return this.privateMember==((SomeClass)other).privateMember;
}
else {
return false;
}
}
출력은 "을 (를) 찾을 수 없습니다!"할 것이다, 우리의 equals
방법은 무시되었습니다 의미합니다.
"equals()를 구현하지만 equals()의 매개 변수를 Object"- "대신 MyClass로 설정하면 equals를 재정의하지 않습니다. – Mena
오브젝트가 매개 변수 인 이유에 대해 연결된 URL이 OP 질문에 대답하는지 여부가 확실하지 않습니다. – seteropere
@seteropere 방금 살펴 봤지만 답을 찾지 못했습니다. – user3817287