본문 바로가기
JAVA BASE/lang & util

01-1. [자바] equals(Object obj) - Object클래스

by staticClass 2020. 12. 23.

equals(Object obj)

매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려준다

String str1 = "JAVA";
String str2 = "JAVA";
system.out.println(str1 == str2); // false

참조변수끼리 비교연산자(==) 연산자를 이용해 비교하면
참조변수의 인스턴스가 가지고 있는 멤버변수의 값이 같아도 false가 주어진다.
그 이유는 참조변수 == 참조변수 는 참조변수의 주소값을 비교 하고
이 참조변수끼리 같은 인스턴스를 참조하고 있냐? 라는 물음 이기 때문이다

String str1 = "JAVA";
String str2 = "JAVA";
system.out.println(str1.equals(str2)); // true

equals를 통해 참조변수 str1, str2가 가지고 있는 value를 직접 비교해야 원하는 결과를 얻을수 있는데
이것은 String 클래스가 equals 메소드 value를 직접 비교하게 오버라이딩 되어 있기 때문에 가능하다
사실 equals 메소드도 오버라이딩을 하기 전에는 참조주소를 비교하게 되어있다.

@Override
public boolean equals(Object obj) {
    if(obj instanceof String){
        return strValue == ((String)obj).strValue;    // 매개변수의 obj의 타입이 Object라서 String으로 형변환 해야 한다.
    }esle{
        return false;
    }
}

실제 String의 equals는 이렇지 않지만 예를 들면
위와 같은 식으로 오버라이딩이 되어 있어 객체의 주소를 비교하는게 아닌 실제 value의 값을 비교할수 있는 것이다.
String의 equals는 문자 하나하나를 비교 하는걸로 알고 있다.😁

댓글