2012-07-23 6 views
1
boolean b1 = false; 
boolean b2 = true; 


String s = new String(b1+""+b2); 

s.replaceAll("false", "f"); 
s.replaceAll("true", "t"); 

아무것도 대체되지 않습니다. 나는 여전히 "거짓 사실"을 얻는다. String의 "false"와 "true"를 모두 "f"와 "t"로 바꾸려고합니다.문자열을 다른 것으로 바꿀 수 없습니다 (부울 값) - Java

임 꽤 확신하지 못합니다. 올바른 방법으로하지 않습니다. 왜 당신의 도움이 필요한지, 크게 감사하겠습니다.

+0

'String'은 Java에서 불변입니다. – Lion

답변

5

String in java는 문자열을 변경할 수 없다는 것을 의미합니다. 즉, 일단 생성되면 String 객체의 값이 변경되지 않습니다.

replaceAll() (또는 String 클래스의 다른 모든 메서드) 메서드는 이전 문자열을 수정하는 대신 새 문자열을 반환하도록 설계되었습니다. 불변성에

s = s.replaceAll("false", "f"); 

더 모두의 here

7

문자열을 변경할 수 없습니다. 문자열에 대한 연산을 수행 할 때 새로운 문자열을 생성합니다. 당신은 당신이 ("거짓", "F"), 당신은 실제로 모든 문자열을 돌연변이하지 않을 calls.replaceAll 때 s = s.replaceAll("false", "f");

4

처럼 다시

그것은해야 참조 뭔가를 결과를 할당해야합니다. 당신과 같이 s로 그 값을 지정해야합니다

s = s.replaceAll("false", "f"); 
2
System.out.println(s.replaceAll("false", "f ").replaceAll("true", "t ")); 
2

는이처럼 쓸 필요가 :

s = s.replaceAll("false", "f"); 
s = s.replaceAll("true", "t"); 

문자열은 불변 당신이 그들을 선언하면 그들이 변경 질수 있도록. s.replaceAll("false", "f");을 호출하면 "false" 대신 "f"이라는 새 문자열 개체가 만들어집니다. 이 새 객체를 변수에 할당하지 않았으므로 새 문자열은 기본적으로 손실되고 원래의 문자열은 왼쪽에 있습니다.

0

우선이기 때문에

그래서 호출해야한다, 당신은 String는 불변임을 인식 할 필요가있다. 이는 그 내용을 변경할 수 없음을 의미합니다. replaceAll() 메서드의 결과를 얻으려면 반환 값을 String에 할당해야합니다.