따라서 HashSet을 이용해서 객체의 중복을 거르고 싶다면,
hashCode 메소드와 equals 메소드를 override 해야한다.
class Movie {
String title;
@Override
public int hashCode() {
return title.hashCode();
}
@Override
public boolean equals(Object o) {
Movie aMovie = (Movie) o;
return title.equals(aMovie.title);
}
}
== 는 무엇을 기준으로 같다고 이야기하는 것일까?
우선 == 는 비교되는 대상의 메모리 주소에 담긴 비트를 비교한다.
그렇다면 equal() 은 ==과 같은가?
'답은 같을 수도 있고, 아닐수도 있다.' 이다.
기본적으로 최초에 구현된 equals 메소드는 ==와 동일하게 동작한다. 하지만 equals 메소드는 Override 될 수 있기 때문에 항상 같다고 할 수 없다.
(실제로 String, Integer 같은 객체에는 다르게 동작하는 것을 알 수 있다.)
class Test {
...
public void test() {
String str1 = "hihi";
String str2 = "hihi";
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(str1 == str2); // true
}
}