String s = "hello";
String backup_of_s = s;
s = "bye";
이 시점에서 백업 변수는 여전히 원래 값 "hello"를 포함합니다 (이것은 String의 불변성 때문입니까?).
그러나이 방법으로 문자열을 복사 하는 것이 실제로 안전 합니까 (물론 일반 가변 객체를 복사하는 것이 안전하지 않습니까?) :
String s = "hello";
String backup_of_s = new String(s);
s = "bye";
다시 말해,이 두 코드 조각의 차이점은 무엇입니까?
편집-첫 번째 스 니펫이 안전한 이유 :
이미 제공된 좋은 답변 (기본적으로 2 개의 스 니펫 간의 성능 차이 문제에 중점을 두었습니다)을 기반으로 좀 더 자세히 설명하겠습니다.
Java에서는 문자열을 변경할 수 없습니다. 즉, 문자열 객체는 생성 후에 수정할 수 없습니다. 그 후,
String s = "hello";새로운 String 인스턴스를 생성하고 주소를 s( s인스턴스 / 객체에 대한 참조) 할당
String backup_of_s = s;새 변수를 backup_of_s만들고 초기화하여 현재 참조하는 객체를 참조합니다 s.
참고 : 문자열 불변성은이 객체가 수정되지 않도록 보장합니다. 백업은 안전합니다
참고 2 : Java 가비지 수집 메커니즘은이 객체가 하나 이상의 변수 ( backup_of_s이 경우)에 의해 참조되는 한 파괴되지 않도록합니다.
마지막으로, s = "bye";불변성 때문에 유일한 String 인스턴스 인 다른 String 인스턴스를 만들고 s변수를 수정 하여 새 객체를 참조하도록합니다.