///////
Search
🍈

"재 정의된" equals와 ==의 차이는 무엇인가요?

equals() 와 == 의 차이

== 주소
equals() 는 객체의 자체를 비교
String s1 = "apple"; String s2 = "apple"; if (s1.equals(s2)) { ... //실행됨 } if (s1 == s2) { ... // 실행되지 않음 }
Java
복사

equals() 오버라이딩

equals()는 모든 객체의 부모 클래스인 Object에 정의되어있는 메소드다
기본적인 equals() 는 객체의 주소값을 비교한다
public boolean equals(Object obj) { return (this == obj); }
Java
복사
주소값이 아닌 내용물을 비교하기 위해서는 equals()를 재정의를 해야한다
- hashCode() 메서드를 재정의했다고 객체의 내부 주소가 바뀌는 것은 아니
Java
복사
class Person { int id; public boolean equals(Object obj) { if(obj instanceof Person) return id == ((Person)obj).id; else return false; } Person(long id){ this.id=id; } }
Java
복사

equals()를 재정의할 땐 hashCode도 반드시 재정의해야 한다

두 객체를 equals로 비교 했을 때 같은 값을 가졌다면 마찬가지로 같은 hashCode를 가져야 하는데, hasCode를 재정의 하지 않으면 각기 다른 객체로 인식하여 각기 다른 hashCode를 생성하게 된다