1. 캐싱 (String Constant Pool) ⭐️

JVM 이 String Constant Pool 영역을 만들고, String 리터럴로 생성된 객체를 공유하여 메모리 사용을 최적화 합니다.

여러 영역에서 String 객체를 공유하기 위해서 String 클래스는 immutable 해야합니다.

명시적 복사본이 필요한게 아니라면 권하지 않고,immutable 이라는 주석

https://user-images.githubusercontent.com/86992911/164169111-a4711663-96e9-46a1-9af7-378e4309dc6d.png

2. Thread-safe

외부에서 동기화를 고려하지 않고, 스레드간에 안전하게 공유할 수 있다.

3. 보안성!

String 은 다수의 Java 클래스에 인자로 사용되고 있고, DB, 네트워크 연결 의 호스트, 포트 등으로도 사용하기 때문에, String이 immutable 하지 않다면, 사용자는 시스템의 특정 파일에 대한 엑세스 권한을 얻은 후 경로, 혹은 주소의 변경이 가능하게 되며, 이것은 보안에 문제가 된다.

4. Hash 기반 Collection key

HashMap, Hashtable 같은 해시 기반 컬렉션의 키로써 많이 사용된다. Immutable 한 HashMap 키는 필수로 요구되진 않지만, 상태 변경의 위험에서 벗어날 수 있다.