Java에서 문자열이 변경 불가능한 이유는 무엇입니까?
Java에서 문자열이 변경 불가능한 이유는 인기 있는 인터뷰 질문 중 하나입니다. 문자열은 모든 프로그래밍 언어에서 가장 많이 사용되는 클래스 중 하나입니다. 우리는 String이 Java에서 불변이며 최종이라는 것을 알고 있습니다. Java 런타임은 이를 특수 클래스로 만드는 문자열 풀을 유지 관리합니다.
Java에서 String이 불변인 이유는 무엇입니까?
- 여러 문자열 변수가 풀에서 동일한 문자열 변수를 참조할 수 있기 때문에 힙 공간. 문자열이 변경 불가능하지 않았다면 어떤 변수가 값을 변경했다면 다른 변수에도 반영되었을 것이기 때문에 문자열 인턴이 불가능했을 것입니다.
- String이 변경 불가능하지 않으면 응용 프로그램에 심각한 보안 위협이 됩니다. 예를 들어 데이터베이스 연결을 위해 데이터베이스 사용자 이름, 암호가 문자열로 전달되고 소켓 프로그래밍 호스트 및 포트 세부 정보가 문자열로 전달됩니다. 문자열은 변경할 수 없기 때문에 값을 변경할 수 없습니다. 그렇지 않으면 해커가 참조된 값을 변경하여 응용 프로그램에서 보안 문제를 일으킬 수 있습니다.
- String은 변경할 수 없기 때문에 멀티스레딩에 안전합니다. 단일 String 인스턴스는 여러 스레드에서 공유할 수 있습니다. 이렇게 하면 스레드 안전을 위해 동기화를 사용하지 않아도 됩니다. 문자열은 암시적으로 스레드로부터 안전합니다.
- 문자열은 Java 클래스 로더에서 사용되며 불변성은 올바른 클래스가 클래스 로더에 의해 로드되는 보안을 제공합니다. 예를 들어
java.sql.Connection
클래스를 로드하려고 하지만 참조된 값이myhacked.Connection
클래스로 변경되어 원치 않는 작업을 수행할 수 있는 인스턴스를 생각해 보십시오. 데이터베이스. - String은 변경할 수 없기 때문에 해시 코드는 생성 시 캐시되며 다시 계산할 필요가 없습니다. 따라서 Map의 키에 대한 훌륭한 후보가 되며 다른 HashMap 키 개체보다 처리 속도가 빠릅니다. 이것이 String이 HashMap 키로 가장 널리 사용되는 이유입니다.
위는 문자열 불변성의 이점을 보여주는 몇 가지 이유입니다. 불변 클래스의 큰 특징입니다.
GitHub 리포지토리에서 더 많은 Java 문자열 예제를 확인할 수 있습니다.