객체(주소)가 동일한지, 값은 동등한지 ?
두 객체가 equals()로 같다면 hashCode()도 동일한 값을 반환해야 합니다. 그렇지 않으면 해시 컬렉션에서의 일관성이 깨질 수 있습니다. (해쉬충돌 발생)
하지만 hashcode 범위가 32비트 정수로 제한되어있기 때문에 다른 객체여도 같은 hash 값이 나올 수 있습니다.
그럴 경우 equals로 한번 더 검증을 하여 해결이 가능합니다.
논리적으로 동일한 객체는 동일한 메모리 주소를 갖는다면 -> 동일한 객체는 동일한 해시코드를 가지고 -> equals()와 hashCode()의 재정의를 통해 일관성을 보장합니다.
final double PI = 3.141592653589793; // 실수형 변수를 PI에 리터럴을 상수로 저장합니다
String은 불변객체로 한번 생성된 문자열 값은 변경되지 않습니다,
문자열을 수정하려고 하면 기존 String 객체의 변경이 아닌 새로운 String 객체를 생성하여 참조합니다.
따라서 메서드에서 객체의 상태를 변경할 수는 있지만, 참조 자체를 변경해도 원본에는 영향을 주지 않습니다.