2010-08-02 4 views

답변

13

String에는 "설정"방법이 없습니다. 자바 문자열은 immutable입니다. 변수 String의 값을 변경하려면 변수에 다른 문자열을 지정해야합니다. 기존 문자열은 변경할 수 없습니다. (새로운 String 객체를 생성하지 않고)

할당은 새로운 객체를 생성하지 않습니다 - 그것은 복사 참조. 참고이 뭔가를 쓰는 경우에도 :

s = "hello"; 

그것은 새로운 문자열 객체에게이 실행될 때마다 만들어지지 않습니다. 문자열 객체는 문자열 풀에서 가져옵니다.

2

문자열은 변경되지 않으므로 이미 생성 된 문자열의 값을 변경할 수 없습니다.

4

사실 자바에서는 그렇게 할 방법이 없기 때문에 String 객체는 기본적으로 변경되지 않습니다.

"+" 연결 연산자를 "str1" + "str2"과 같이 사용하는 것이 실제로는 세 번째 것을 생성하기 위해 모든 문자열을 복사하기 때문에 실제로 비효율적입니다.

는 필요에 따라 그것은 개체의 당신의 정의에 약간 의존 StringBuilder

0

사용하는 것이 좋습니다. 참조를 의미한다면, 아니오. 참조는 항상 생성됩니다. 문자가 사용하는 메모리를 의미한다면, 확실히.

문자열이있는이 과제에 있다는 것을 의미 가능한 경우 구금되어

String s1 = "Hello"; 
String s2 = "Hello"; 

2 참조 (메모리 위치에 대한 포인터)가 있지만 Hello은 한 장소에 메모리이다. 이것은 문자열을 수정할 수없는 이유 중 하나입니다.

0

물론 리플렉션을 통해 내부 문자 배열에 액세스 할 수 있습니다. 그러나 그렇게하는 것은 대개 나쁜 생각입니다. http://www.eclipsezone.com/eclipse/forums/t16714.html에 대한 자세한 정보.

+0

항상 ** 나쁜 아이디어입니다. 변경 가능한 문자열이 필요하면'StringBuilder' 인스턴스를 대신 사용하십시오. –

1

String 객체는 Java에서 변경할 수 없으므로 변경 사항이 있으면 새 String 객체가 만들어집니다. 새 객체를 만들지 않고 객체와 같은 문자열을 변경하려면 StringBuilder를 사용하십시오. 보너스로 StringBuilder는 문자열의 최종 길이에 대해 알고있는 경우 추가 메모리를 미리 할당 할 수 있습니다.

1

"둘러싸는 유형"- 익명 유형 내에서 문자열을 설정해야하기 때문에이 질문에 마주 쳤습니다. 그러나 내부에 설정하고 외부에서 사용하려는 모든 변수는 최종해야합니다.

간단한 해결책은 입니다. StringBuilder을 사용하십시오.이 문자열은 변경 가능한 String입니다.

관련 문제