동일성이란 동일하다는 뜻이다.
두개의 객체가 있다면 두 객체가 완전히 같은 경우를 의미한다.
두 객체가 주소값이 같으면 같은 객체로 본다.
동일성은 ==으로 판단한다. ==은 주소를 검사하는 연산자이다.
예를 들어
String a = new String("Hello");
String b = new String("Hello");
String c = a;
System.out.println(a == b); // false, a와 b는 다른 메모리 위치에 있는 서로 다른 객체
System.out.println(a == c); // true, a와 c는 동일한 객체를 참조
위의예제에서 a와 b는 같은 내용의 문자열을 가지고 있지만, 서로 다른 객체입니다. 반면 a와 c는 동일한 객체를 참조하므로 == 연산자는 true를 반환합니다.
동등성은 동등하다는 뜻으로 두 개의 객체가 같은 정보를 갖고 있는 경우를 의미한다.
동등성은 객체들이 다른 주소를 가리키고 있어도 내용만 같으면 두 변수는 동등하다고 이야기 할 수 있다.
동등성은 equals()으로 판단한다.
String에서의 동일성 동등성String a = "abc";
String b = "abc";
System.out.println(a == b);
이 결과는 true일까 false일까? 답은 true이다.
자바는 String Pool이라는 개념이 있다.
"abc"라는 String은 String Pool에 들어가서 만약에 뒤에서 또 "abc"를 쓴다면 String Pool에 "abc" 접근하게 된다.
즉, a와 b는 같은 주소를 바라본다.(동일성)
출처
[Java] 동일성(identity)과 동등성(equality)
[java] 동일성과 동등성
[Java] 동일성(==)과 동등성(equals)