String 불변 이유

String은 가장많이 사용하는 레퍼런스이므로 가장 효율적으로 설계되어야 한다.
불변은 가장 좋은 대안으로 성능, 동기화, 캐싱, 보안 측면에서 이점이 있다.

성능

문자열은 많이 사용하기 때문에 스트링풀을 사용하는데, 스트링 풀에서는 값이 변경되면 안된다.
같은 문자열을 가진 String 객체가 두개 있다고 하면 스트링 풀에서는 하나의 문자열을 저장하고
두개의 객체가 하나의 문자열을 참조하기때문에 하나가 변경되면 다른 하나가 변경될 수 있기 때문에 신뢰성이 없어진다.

동기화

문자열이 수정될 때 기존값은 변경되지 않으므로 멀티스레딩에 안전하다.

캐싱

값이 변경되지 않으므로 해쉬코드를 캐싱하고 사용할 수 있다

보안

외부 함수에서 변경할 수 없다.