사전 정의
정체성과 평등의 차이점은 무엇인가요?
먼저 사전적 의미를 살펴보자.
평등(정체성) 다른 것들과 구별되어 변하지 않고 존재하는 개별적인 성질을 말한다.
등가평등이란 두 개 이상의 대상이나 개념이 동등하게 취급될 수 있는 상태를 의미합니다.
사전적 의미만 봐서는 쉽지 않을 것 같은데, 뜻을 추측해보려 한다면…
동일성의 경우 두 가지가 정확히 같은 상태로 존재하는 경우로 생각할 수 있다. 다시 말해서, 정확히 같은 경우오전.
동등한 경우 정확히 같지는 않지만 동일하게 취급될 수 있는 것의미하는 것 같다
예를 들어 자동차 공장의 자동차는 “등가”라고 할 수 있습니다. 그러나 그것이 “동일하다”는 의미는 아닙니다.
모든 자동차가 다르게 식별될 수 있기 때문입니다.
반면에 A라는 사람은 자동차 이름을 “붕붕이”라고 하고 B라는 사람은 자동차 이름을 “방방이”라고 하면
붕붕이와 방뱅이는 같다고 할 수 있다. 그들은 같은 차를 가리키기 때문입니다.
대상 국가의 동일성 및 동등성
개체는 동일합니다.
개체가 같다는 것은 메모리 참조가 같다는 것을 의미합니다.
반면에 Same은 논리적으로 동일함을 의미합니다.
코드와 비교해 봅시다.
String test1 = "abc";
String test2 = "abc";
test1 == test2; // true!
두 개체 모두 문자열 풀에서 동일한 메모리 주소를 가리킵니다. 그것은 그들이 동일하다는 것을 의미합니다.
같음 비교 연산자(==)는 메모리 주소가 같은지 비교합니다. 따라서 위 연산의 결과는 참입니다.
String test1 = new String("abc");
String test2 = new String("abc");
test1 == test2; // false!
test1.equals(test2); // true!
반대로 힙에 새 문자열을 만들면 두 개체의 값은 같지만 메모리 주소는 다릅니다.
같음 비교 연산자(==)의 결과는 false입니다.
그러나 같음 비교를 수행하기 위해 String 클래스에서 equals 메서드가 재정의되기 때문에 equals의 결과는 true입니다.
즉, 주소 비교가 아닌 값이 나타내는 값을 비교하여 논리적으로 같은지 확인합니다.
정리하다
Java에서 동일함은 메모리 주소가 동일함을 의미합니다.
즉, 두 객체가 정확히 동일한 객체라면 동일하다고 말할 수 있습니다.
반면 동등성은 내부적으로 동등성을 확인합니다.
동등성은 개발자가 정의하는 방식에 따라 참 또는 거짓이 될 수 있습니다.
같음 비교가 필요한 경우 equals 및 hashCode를 적절하게 재정의합니다.
우리는 잠시 후에 논의하고 나중에 hashCode를 논의할 것입니다!
