웹사이트 검색

Java에서 문자열이 변경 불가능한 이유는 무엇입니까?


Java에서 문자열이 변경 불가능한 이유는 인기 있는 인터뷰 질문 중 하나입니다. 문자열은 모든 프로그래밍 언어에서 가장 많이 사용되는 클래스 중 하나입니다. 우리는 String이 Java에서 불변이며 최종이라는 것을 알고 있습니다. Java 런타임은 이를 특수 클래스로 만드는 문자열 풀을 유지 관리합니다.

Java에서 String이 불변인 이유는 무엇입니까?

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

위는 문자열 불변성의 이점을 보여주는 몇 가지 이유입니다. 불변 클래스의 큰 특징입니다.

GitHub 리포지토리에서 더 많은 Java 문자열 예제를 확인할 수 있습니다.