728x90
반응형
String 클래스에서 String 객체의 값을 변경하는 것처럼 보이는 모든 메서드는 실제로는 String 값을 변경하는 것이 아니라, 새로운 String 인스턴스를 반환하는 것이다.
String의 값은 절대 변하지 않으며 바꿀 수 없다.
@Test
public void stringChanges(){
final String greeting = "Good Morning, Corn";
final String substring = greeting.substring(0, 4);
assertTrue(substring.equals("Good"));
assertFalse(greeting.equals(substring));
assertTrue(greeting.equals("Good Morning, Corn"));
}
sbustring, replace, split 같은 변경하는 메서드는 적절하게 변경된 String객체의 새 복사본을 반환한다.
인스턴스로 표현되는 값은 절대 변경할 수 없다.
(불변성의 장점 -> 스레드에 안전하다. 잠금이나 복잡한 스레드 조절이 필요 없다.)
Integer, Double, Character, BigInteger같은 모든 숫자형 클래스들도 불변 클래스다.
728x90
반응형
'그 외 ... (정리해야함) > 질문과 답변' 카테고리의 다른 글
타입의 변화는 제네릭에 어떤 영향을 미치는가? (0) | 2019.05.02 |
---|---|
인터닝(Interning)이란 무엇인가? (0) | 2019.05.02 |
String은 메모리에 어떻게 저장되는가? (0) | 2019.05.02 |
JAVA에서 다형성과 상속이란 무엇인가? (0) | 2019.05.02 |
메서드와 변수에 사용되는 static 키워드의 역할은 무엇인가? (0) | 2019.05.02 |