-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
String이 hashCode()를 오버라이딩한 이유 #2
Labels
Java
Java 관련 주제
Comments
beginin15
changed the title
String이 hashcode 메소드를 오버라이딩한 이유
String이 hashCode()를 오버라이딩한 이유
Aug 8, 2021
개발하면서 String을 HashXXX의 Key로 사용하는 경우가 많다.
|
참고할 주제: 동등성과 동일성 |
질문의 의도는 객체의 동등성 비교를 설명하기 위한 것이고 ‘String’을 예시로 들으신건가 보네요! 우리가 클래스를 작성할 때 항상 ‘equals()’랑 ‘hashCode()’를 함께 재정의하는 이유랑 동일한 맥락인 것 같아요. 저는 ‘String’만의 특성이 따로 있는건가 싶어서 이것저것 찾아봤는데 질문의 의도에서 벗어난 것 같긴 하지만 겸사겸사 JVM의 상수풀에 대해서도 공부해보면 좋을 것 같다는 생각이 들었어요.ㅎㅎ |
제이의 얘기를 참고해서 지난 번에 정리한 constant pool 내용도 살짝 가져왔어요! Constant PoolString 객체를 생성하는 방법Literal ("")
@DisplayName("literal로 생성 시 동일")
@Test
void stringLiteral() {
String str1 = "abcde";
String str2 = "abcde";
assertThat(str1).isEqualTo(str2);
} new 연산자 사용
@DisplayName("new로 생성한 String 객체는 값이 같아도 동일하지 않음")
@Test
void stringNew() {
String str1 = new String("1234");
String str2 = new String("1234");
assertThat(str1).isNotSameAs(str2);
}
@DisplayName("String Pool 바깥에 있던 String 객체를 intern -> String Pool에 추가")
@Test
void internedString() {
String constant = "interned String";
String newString = new String("interned String");
assertThat(constant).isNotSameAs(newString);
String internedString = newString.intern();
assertThat(constant).isSameAs(internedString);
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Q. 여기서 1번의 결과는 같다. 이유는 String이
hashCode()
를 재정의 했기 때문. 왜 재정의 되어있는가?The text was updated successfully, but these errors were encountered: