JAVA에서 문자열을 변경할 수 없는 이유는 무엇입니까? 정확히 무엇을 의미합니까?

그래서 최근에 Java에서 문자열을 변경할 수 없는 이유에 대한 질문을 발견했습니다.
이에 대해 논의하기 전에 먼저 불변 문자열이 무엇인지 말하고 싶습니다.

Immutable simply means unmodifiable or unchangeable. Once String object is created its data or state can't be changed but a new String object is created.



이 기사를 진행하기 전에 먼저

이것이 문자열이 작동하는 방식입니다:

String str = new String("Tisha");


이것은 평소와 같이 "Tisha"를 포함하는 문자열을 생성하고 참조 str을 할당합니다.

  str = str.concat(" Agarwal");




이것은 문자열 "Agarwal"을 str 에 추가합니다. 하지만 잠깐, String 객체는 변경할 수 없기 때문에 이것이 어떻게 가능한가요? 놀랍게도 그렇습니다.
위의 명령문이 실행되면 VM은 String str 값, 즉 "Tisha"를 취하고 "Agarwal"을 추가하여 "Tisha Agarwal" 값을 제공합니다. 이제 문자열은 변경할 수 없으므로 VM은 이 값을 str 에 할당할 수 없으므로 새 String 개체를 만들고 값"Tisha Agarwal"을 제공하고 참조 str을 제공합니다.

문자열을 변경할 수 없는 이유는 무엇입니까?

예제를 통해 이것을 이해합시다.
String chocolate1="KitKat";
String chocolate2="KitKat";
String chocolate3="KitKat";



무슨 일이야?
여기에서 KitKat의 객체가 String 상수 풀 내부에 생성되고 세 개의 변수 chocolate1, chocolate2, chocolate3가 모두 그것을 가리키고 있습니다.

이제 cholocate3을 MilkyBar로 변경하면chocolate3=MilkyBar;
문자열이 변경 가능한 경우 새 개체를 만들지 않고 chocolate3 값이 KitKat에서 MilkyBar로 변경되었다고 가정합니다. 그러나 이것이 chocolate1chocolate2 값도 변경될 것이라고 생각하지 않습니까? 위의 그림과 같이 KitKat에서 MilkyBar까지 이 3개는 동일한 객체를 가리키고 있었습니다.

그렇기 때문에 문자열은 불변입니다.
위의 예에서 이제 chocolate3은 다른 객체를 생성하고 이를 가리킬 것입니다.



기억할 점
  • 문자열 개체가 문자열 풀에 캐시되므로 Java에서 문자열을 변경할 수 없습니다. 캐시된 문자열 리터럴은 여러 사람이 공유하므로 한 사람의 행동이 다른 모든 사람에게 영향을 미치는 위험이 항상 있습니다.
  • 좋은 웹페이지 즐겨찾기