String은 불변객체다.
package lang.string.immutable;
public class StringImmutable1 {
public static void main(String[] args) {
String str = "hello";
str.concat("java");
System.out.println("str = " + str);
}
}
String.concat()을 이용하면 기존 문자열에 새로운 문자열을 합칠 수 있다.
이럴 경우 어떤 실행 결과가 나올까?
str = hello
전혀 합쳐지지 않았다. 이 이유에 관해 알아보자.
package lang.string.immutable;
public class StringImmutable2 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = str1.concat(" java");
System.out.println("str1 = " + str1);
System.out.println("str2 = " + str2);
}
}
String은 불변객체이기 때문에 변경이 필요한 경우 기존값을 변경하지 않고, 새로운 결과를 만들어서 반환한다.
문자열 풀에 있는 String 인스턴스의 값이 변경되면 같은 문자열을 참고하는 다른 변수의 값도 함께 변경이 된다.
만약 String 내부의 값을 변경할 수 있다면, 기존에 문자열 풀에 있는 문자를 참조하는 변수의 모든 문자가 변경되는 문제가 발생할 수 있다.