programing

어떻게 자바에 천을 똑같이 복사해야 한다고?

goodcopy 2022. 7. 12. 22:00
반응형

어떻게 자바에 천을 똑같이 복사해야 한다고?

    String s = "hello";
    String backup_of_s = s;
    s = "bye";

이 시점에서, 백업 변수 여전히 원본 값"안녕하세요"(이 현악의 불변 때문에 있습니까?)가 포함되어 있습니다.

하지만 과연 이 메서드(그것은 물론 정기적으로 변할 수 있는 개체를 복사하기에 안전하지 않습니다)과 천을 복사하거나 이렇게 써는 것이 좋다 안전한가?:

    String s = "hello";
    String backup_of_s = new String(s);
    s = "bye";

그건 다른 말로, 이 두가지 정황 사이의 차이점( 있는 경우)?


편집-왜 첫번째 무리 없이 안전하게 되는 이유는.

나를 조금 더 세심한 것을 것들, 좋은 대답에 따라 이미(본질적으로 성능의 차이 문제에 대한 2가지 정황 사이에 집중되었다)제공 설명할까요.

천 자바 있는데, 이것은 String개체가 건설한 후 수정하지 않을 수 있다는 의미에서는 변경할 수 없습니다.이런 이유로,

String s = "hello";그리고 그것의 주소를 할당합니다 새로운 String인스턴스를 만듭니다.s(s인스턴스/객체에 대한 참조가 되는 것)

String backup_of_s = s;새로운 변수를 만듭니다backup_of_s너무 커서는 개체가 현재에 의해 참조된를 참조하는 그리고 초기화하다.s.

참고:String불역성 보장은 이 개체:우리의 백업 안전하다고 수정하지 않을.

주 2: Java 가비지 수집 메커니즘은 적어도 하나의 변수에 의해 참조되는 한 이 오브젝트가 파괴되지 않음을 보증합니다.backup_of_s이 사건)에

마침내.s = "bye";다른 String 인스턴스를 생성하여(불변성을 위해 이것이 유일한 방법)s가변이 이제 새로운 개체를 참조합니다.

문자열은 불변하기 때문에 두 버전 모두 안전합니다.그러나 후자는 효율성이 떨어집니다(추가 개체가 생성되고 경우에 따라 문자 데이터가 복사됩니다).

이 점을 고려하여 첫 번째 버전을 선호해야 합니다.

문자열은 불변의 오브젝트이므로 참조되는 오브젝트는 변경할 수 없기 때문에 참조에 대응하는 것만으로 복사할 수 있습니다.

따라서 첫 번째 예시와 같이 문제없이 복사할 수 있습니다.

String s = "hello";
String backup_of_s = s;
s = "bye";

두 번째 버전은 추가 문자열 개체를 생성할 필요가 없는 경우에 생성하기 때문에 효율성이 떨어집니다.

불변성은 첫 번째 버전이 예상대로 동작하므로 선호되는 접근 방식임을 의미합니다.

두 번째 케이스는 String 풀에서도 비효율적입니다.인턴하려면 리턴 레퍼런스에 intern()을 명시적으로 호출해야 합니다.

String str1="this is a string";
String str2=str1.clone();

렇게복 복사 ?사 ???더 생각하기 에, 그 를 입수하는 것이 좋다고 생각을 합니다. 그래서 그 데이터는str1str2미래 액션에서 참조되고 수정됩니다.

언급URL : https://stackoverflow.com/questions/10607990/how-should-i-copy-strings-in-java

반응형