한번 생성된 String 클래스의 인스턴스는 여러개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야한다.
String은 변경 불가능한 문자열을 생성한다.
이렇게되면 하나의 문자열을 다른 문자열과 연결하면 새 문자열이 생성되고, 이전 문자열은 가비지컬렉터로 들어가게 된다는 뜻이다.
결국 100만개의 문자열을 연결해야 하는 상황에서는 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다. 이걸 100만번 수행하게된다.
결과적으로 메모리를 어마어마하게 잡아먹게된다.
public class Main {
public static void main(String[] args){
String str1 = "프로그래밍 - ";
String str2 = "자바";
String str3 = "안드로이드";
String result = str2 + str3;
str1 += str2 += str3;
System.out.println(result);
System.out.println(str1);
}
}
// > 자바안드로이드
// > 프로그래밍 - 자바안드로이드
public class Main{
public static void main(String[] args){
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
// 두 println()은 같은 값을 출력한다
System.out.println(stringBuilder);
System.out.println(str);
}
}
먼저 StringBuilder의 객체를 생성한 후, append()의 인자로 연결하고자 하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출합니다.
public class Main{
public static void main(String[] args){
StringBuilder stringBuilder = new StringBuilder();
ArrayList<String> list = new ArrayList<>();
list.add("첫 번째, ");
list.add("두 번째, ");
list.add("세 번째, ");
list.add("네 번째, ");
list.add("다섯 번째");
for (int i = 0; i < list.size(); i++)
{
stringBuilder.append(list.get(i));
}
System.out.println(stringBuilder);
}
}
// >> 첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째