2012-11-29 4 views
0

우리는 이러한 진술이있는 경우 :.불변의 문자열 클래스입니까?

String S1 = "AAA"; 
S1 = "aaa"; 

이 특정 속성에 할당 원래 값이 변경 has't 것을 (String 클래스는 불변이며, S1은 구금 객체이기 때문에)을 의미한다. 우리는 다음과 같은 문장이있는 경우

지금 ... 는 :

String S1 = new String("AAA"); 
S1="aaa"; 

이 문자열 클래스의 특정 속성에 할당 원래 값이 변경되었음을 의미 (String 클래스는 불변이고, S1이 때문이다. 피구금자가 아닌)

제 권리는 무엇입니까?

+1

보기 쉬운 S1은 어느 경우에도 변경되지 않습니다. – madth3

답변

4

아니요, 어떤 상황에서도 String 개체를 변경할 수 없습니다. new String("foo")을 호출하면 전달 된 내용이있는 다른 하나의 문자열이 만들어집니다. 그러지 마세요.

편집 :
두 번째 경우 S1은 인턴드되지 않지만이 변경 사항은 취소되지 않습니다. 따라서 String 할당은 항상 왼쪽 객체를 변경하지 않고 간단히 참조를 다시 작성합니다.

+0

실수로 죄송합니다 ... – user1735329

+0

지금 다시 원래의 가치를 수정할 것입니다. – user1735329

+0

_only_ 변경되는 것은 'S1'이 다른 'String'객체를 가리킨다는 것입니다. 당신은'String' 자체를 수정하지도, 수정할 수도 없습니다. –

1

문자열을 변경할 수 없습니다. 즉, String 인스턴스는 변경할 수 없습니다. 다른 변수이지만 여전히 변경 불가능한 String 인스턴스를 참조하기 위해 새 변수를 만듭니다.

그것은 방법

String s = new String(); 

만든 빈 String 객체 ("")의 변화 목록 정렬에서 원래 문자열을 분기하는 문자열의 변경을 할 수 있습니다. 그리고 변수 s는 그 객체를 참조합니다. 문자열 오브젝트를 다른 답변에 추가

1

,

문자열 생성자는 설계 결함이다 (그것은 두 번 불변의 인스턴스를 만들 수 이해가되지 않습니다) 및되지 않습니다. 사용하지 마십시오.