>Java >java지도 시간 >String의 불변성에 대한 이유 소개

String의 불변성에 대한 이유 소개

不言
不言앞으로
2019-03-23 11:17:112893검색

이 기사는 문자열의 불변성에 대한 소개를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

Maoyan 인터뷰에서 면접관은 왜 문자열 문자열이 변하지 않는지 물었습니다. 당시 내 대답은 String 클래스가 final 키워드로 수정되었기 때문이라는 것이었습니다. 왜 final로 수정하면 불변이냐고 물었을 때 제가 말한 내용이 말이 안 된다는 것을 알았습니다. 그런 다음 그 이유를 구체적으로 확인했습니다.

String의 불변성은 아래 그림과 같이 s를 변경하면 s가 새 개체를 가리키고 원래 개체는 변경되지 않습니다.

String의 불변성에 대한 이유 소개

소스 코드가 어떻게 구현되었는지 살펴보세요.

String의 불변성에 대한 이유 소개

String이 final로 정의되어 있어 String을 상속할 수 없다는 것을 알 수 있습니다. 그런 다음 String의 내부 구현이 char 배열임을 알 수 있습니다. 정의는 최종적입니다. 이때, 최종 수정된 필드는 생성된 후에는 변경할 수 없어 끝난다고 생각하시는 분들도 계시겠지만, 그렇지 않습니다.

값은 불변이지만 값의 참조 주소만 불변이기 때문입니다. 그러나 그것이 참조하는 배열 배열은 변경 가능합니다.

final int[] value={1,2,3};
value[2]=100;  //这时候数组里已经是{1,2,100}

그래서 String이 근본적으로 불변인 이유는 Sun 엔지니어가 값 배열을 모든 메소드에서 변경하지 않고 비공개로 정의하고 이를 방지하기 위해 전체 String을 상속으로 설정했기 때문입니다. 다른 사람들에 의해 파괴되고 있습니다. 따라서 String의 불변성의 핵심은 final의 역할이 아닙니다.

동시에 문자열의 불변성으로 인해 많은 공간을 차지하지 않기 위해 Java 작성자는 문자열 상수 풀을 설계했습니다.

String one = "someString";
String two = "someString";

String의 불변성에 대한 이유 소개

이 기사는 여기까지입니다. 더 많은 내용에 주목하세요. 다른 흥미로운 콘텐츠 PHP 중국어 웹사이트의 Java 비디오 튜토리얼 칼럼!

위 내용은 String의 불변성에 대한 이유 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제