변경할 수 없는, 불변의 이라는 뜻을 가지고 있습니다.생성 후 그 상태를 바꿀 수 없는 객체를 immutable object라고 부릅니다.reference 타입의 객체는 모두 immutable object입니다.String str = "s";
for(int i =0;i<5;i++){
str+= "s";
}
System.out.println(str);
우리는 출력의 결과로 ssssss를 얻을 수 있습니다. 그렇다면 ssssss는 처음의 s에 값이 추가된 것일까요? 아니면 str에 ssssss이라는 새로운 값이 들어간 것일까요? 정답은 후자입니다.
String str = "s";
System.out.println(System.identityHashCode(str));
for(int i =0;i<5;i++){
str+= "s";
}
System.out.println(System.identityHashCode(str)); //반복문 실행 전과 다른 값을 반환합니다.
System.out.println(System.identityHashCode(str)); //str에 아무런 변화가 없다면 같은 값을 반환합니다.
위 예제에서 반복문을 시행하기 전과 후의 결과값이 다른 걸 확인할 수 있습니다.
System.identityHashCode()는 객체의 고유한 hashcode를 반환합니다.
immutable하기 때문에 계속해서 새로운 주소에 값을 만들고, 새로운 주소값을 담아내고 있었던 것입니다.garbage상태가 됩니다.Stringbuffer와 Stringbuilder의 사용이 권장되어 집니다.위에서 언급했던 System.identityHashCode()에 대해 조금 더 설명해 보겠습니다.
System.identityHashCode()는 hashCode()와 비교됩니다.hasCode()는 모든 객체의 부모인 Object클래스에 정의되어 있습니다. 그래서 모든 객체에서 재정의하여 쓸 수 있습니다.System.identityHashCode() 오버라이드가 불가능하며 객체마다의 고유한 HashCode를 반환합니다.