2013-05-14 2 views
-7

Java 문자열이 변경되지 않는 이유는 무엇입니까? 내가 String name = "Paul"; 이상 name = "Henry";로 이름 변경 값을 말할 수 있습니다. 불변성은 어디서 오는가?Java 문자열은 변경 불가능합니다?

+0

이전 문자열 개체를 변경하지 않고, 대신 'name'에 새 개체를 할당합니다. –

+3

다섯 가지 좋은 이유 : [왜 문자열은 Java에서 불변이거나 최종입니까?] (http://javarevisited.blogspot.in/2010/10/why-string-is-immutable-in-java.html) –

+0

http : // stackoverflow .com/questions/1552301/immutability-of-strings-in-java –

답변

1

개체 자체는 변경되지 않았습니다. 당신이 무슨 짓을

이 변경되지되었습니다 다음

name <- String("Paul") 
name <- String("Henry") 

문자열 ("폴")입니다.

는 다음과 같은 시도 :

String a = "test"; 
String b = a; 
a = "test2"; 

System.out.println(b); 
3

새로운 문자열을 생성, 그들은 확실히 불변 BTW 구금 있습니다.

당신은이 작업을 수행 할 수 없습니다 문자열 becuase

String name = "Paul"; // in effect the same as new String("Paul"); 
name.setValue("Henry") 

는 불변 당신은 완전히 새로운 객체를 생성해야합니다.

+0

어떻게 이름이 객체이며 그 값이 "Henry"로 변경 되었습니까? –

+0

@PaulOdero :'name'은 (는) 객체가 아닙니다. 'name'은 (String) 객체에 대한 참조입니다. 처음에는''Paul "'객체에 대한 참조이고, 나중에 그 참조가''Henry ''객체를 가리 키도록 변경합니다. ''Paul "'객체는 변경되지 않기 때문에 변경되지 않습니다. – jlordo

+0

@jlordo "Paul" ""Henry "'모두 문자열 풀에 존재합니까? 그래서 "name"이 "Paul"을 가리키고 "Henry"는' –

1

String을 참조하는 변수 : name과이 변수가 참조하는 String을 구별합니다.

원래 이름은 "Paul"이라는 문자열을 가리키고 나중에 다른 곳을 가리 키도록 변경했습니다. "Paul"자체는 영향을받지 않았습니다.

이제 참조 NAME1 무엇
String name = "Paul"; 
String name1 = name; 

name = "Peter"; 

을 고려?

관련 문제