자바 본 강의
Object 클래스와 equals() 메서드
우주코딩
2021. 8. 9. 18:15
Object 클래스와 equals() 메서드
- equals()
Object에서 상속 받은 equals()는 == 연산자와 마찬가지로 인스턴스가 같은지를 비교한다.
만약 그 내용물이 같은지 비교하고 싶다면 equals()를 재정의 하라!
Object에서 상속 받은 것을 그대로 사용하면 equals()는 인스턴스가 같은지 비교한다.System.out.println(obj1.equals(obj2)); //false System.out.println(obj1 == obj2); // false
=> 인스턴스의 내용물이 같은지 비교하도록 만들고 싶다면 equals()을 오버라이딩 하라!
=> String와 wrapper 클래스는 equals() 오버라이딩 하였다.
=> StringBuffer 클래스는 equals()를 오버라이딩 하지 않았다.
따라서
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
// 위의 실행 결과를 보면 s1과 s2가 서로 다른 인스턴스인데도 불구하고
// true를 리턴한다.
// 이는 String 클래스에서 equals()를 오버라이딩하였기 때문이다.
StringBuffer sb1 = new StringBuffer("Hello");
StringBuffer sb2 = new StringBuffer("Hello");
System.out.println(sb1 == sb2); // false
System.out.println(sb1.equals(sb2)); // false
sb1.equals(sb2)의 리턴 값은 false이다.
StringBuffer는 Object로부터 상속 받은 equals()를 오버라이딩 하지 않았다.
그래서 Object의 equals()가 호출된 것이다.
Object의 equals()는 데이터가 같은지를 비교하는 것이 아니라, 인스턴스가 같은지를 비교한다.
equals()를 인스턴스가 아닌 문자열 값을 비교하는 것으로 바꾸고 싶다면 오버라이딩해야한다.