JVM 이 String Constant Pool 영역을 만들고, String 리터럴로 생성된 객체를 공유하여 메모리 사용을 최적화 합니다.
여러 영역에서 String
객체를 공유하기 위해서 String
클래스는 immutable
해야합니다.
immutable
이라는 주석외부에서 동기화를 고려하지 않고, 스레드간에 안전하게 공유할 수 있다.
String
은 다수의 Java 클래스에 인자로 사용되고 있고, DB, 네트워크 연결 의 호스트, 포트 등으로도 사용하기 때문에, String
이 immutable
하지 않다면, 사용자는 시스템의 특정 파일에 대한 엑세스 권한을 얻은 후 경로, 혹은 주소의 변경이 가능하게 되며, 이것은 보안에 문제가 된다.
HashMap, Hashtable 같은 해시 기반 컬렉션의 키로써 많이 사용된다. Immutable 한 HashMap 키는 필수로 요구되진 않지만, 상태 변경의 위험에서 벗어날 수 있다.