Identity vs Equality

정미·2022년 7월 24일
0

Computer Science

목록 보기
39/81

Identity 동일성

두 객체가 완전히 같은 경우, 하나의 객체

  • 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다.
  • == 연산자를 통해 동일한지 판단할 수 있다.
    • primitive 타입은 객체가 아니라 주소가 없으므로 == 연산자를 사용했을 때 값이 같으면 동일하다고 말한다.

Equality 동등성

두 객체가 같은 정보를 가지고 있는 경우

  • 참조 주소가 서로 달라도 내용만 같으면 된다.
  • equals 연산자를 통해 동등한지 판별할 수 있다.

equals()

Object

public boolean equals(Object obj) {
	return (this == obj);
}
  • 모든 객체의 조상 객체
  • 단순한 동일성 비교 연산

String

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
  • 재정의한 equals() 메서드
  • 두 객체의 동일성 판단
  • 동일하지 않다면 문자 하나씩 비교

Integer

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

Objects

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}
  • 두 객체가 동일하지 않다면 a의 equals() 메서드에 의존한다.
  • 커스텀 객체를 만들 때 동등성 비교가 필요하다면 반드시 재정의해주어야 한다.

출처

0개의 댓글