문자열이 변경 불가능하다는 것은 객체 자체는 변경할 수 없지만 객체에 대한 참조는 변경할 수 있음을 의미합니다. 문자열은 다른 사람들이 그것을 확장하고 불변성을 파괴하는 것을 허용하지 않도록 최종적으로 만들어집니다.
- 보안 매개변수는 일반적으로 네트워크 연결, 데이터베이스 연결 URL, 사용자 이름/비밀번호 등에서 문자열로 표시됩니다. 변경 가능한 경우 이러한 매개변수를 쉽게 변경할 수 있습니다.
- 동기화 및 동시성 String을 변경할 수 없도록 하면 자동으로 스레드로부터 안전하므로 동기화 문제가 해결됩니다.
- 캐싱 컴파일러가 String 개체를 최적화할 때 두 개체가 동일한 값(a =" test" 및 b =" test")을 가지므로 하나의 문자열 개체만 필요한 것처럼 보입니다(a 및 b 모두에 대해 이 두 개체는 같은 개체로).
- 클래스 로딩 String은 클래스 로딩을 위한 인수로 사용됩니다. 변경 가능한 경우 잘못된 클래스가 로드될 수 있습니다(변경 가능한 객체가 상태를 변경하기 때문에).
예:
public class StringImmutableDemo { public static void main(String[] args) { String st1 = "Tutorials"; String st2 = "Point"; System.out.println("The hascode of st1 = " + st1.hashCode()); System.out.println("The hascode of st2 = " + st2.hashCode()); st1 = st1 + st2; System.out.println("The Hashcode after st1 is changed : "+ st1.hashCode()); } }
출력:
The hascode of st1 = -594386763 The hascode of st2 = 77292912 The Hashcode after st1 is changed : 962735579