Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 String 클래스가 변경할 수 없거나 최종적인 이유는 무엇입니까?


문자열이 변경 불가능하다는 것은 객체 자체는 변경할 수 없지만 객체에 대한 참조는 변경할 수 있음을 의미합니다. 문자열은 다른 사람들이 그것을 확장하고 불변성을 파괴하는 것을 허용하지 않도록 최종적으로 만들어집니다.

  • 보안 매개변수는 일반적으로 네트워크 연결, 데이터베이스 연결 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