문자열 더하기
String str1 = "Hello World!";
String str2 = str1.substring(5); # str1을 5번째 인덱스부터 자른다
System.out.println(str1);
System.out.println(str2);
String str3 = str1 + str2;
System.out.println(str3);
String str4 = new StringBuffer().append(str1).append(str2).toString();
// str1 + str2 를 하게 되면 내부적으로 이와 같은 절차를 수행한다
System.out.println(str4);
출력값
Hello World!
World!
Hello World! World!
Hello World! World!
문자열 더하기 반복
String str5 = "";
for(int i = 0; i < 100; i++){ // StringBuffer를 100번 생성
str5 = str5 + "*"; // str5 = new StringBuffer().append(str5).append("*").toString();
}
System.out.println(str5);
StringBuffer sb = new StringBuffer(); // 한번만 생성
for(int i = 0; i < 100; i++){
sb.append("*");
}
String str6 = sb.toString();
System.out.println(str6);
출력값
****************************************************************************************************
****************************************************************************************************
두 출력값의 결과는 같지만 위의 for문에서는 StringBuffer의 객체를 계속해서 생성하므로 속도가 느리다
문자열 더하기 반복 - 시간 측정
long startTime1 = System.currentTimeMillis(); // 시작 시간 기록 ( millisecond )
String str = "";
for(int i = 0; i < 10000; i++){
str = str + "*";
}
long endTime1 = System.currentTimeMillis(); // 종료 시간 기록 ( millisecond )
long startTime2 = System.currentTimeMillis(); // 시작 시간 기록 ( millisecond )
StringBuffer sb = new StringBuffer();
for(int i = 0; i < 10000; i++){
sb.append("*");
}
long endTime2 = System.currentTimeMillis(); // 종료 시간 기록 ( millisecond )
long duration1 = endTime1 - startTime1; // 종료 시간 - 시작 시간
long duration2 = endTime2 - startTime2;
System.out.println("String의 +연산 이용: " + duration1);
System.out.println("StringBuffer 이용: " + duration2);
출력값
String의 +연산 이용: 43
StringBuffer 이용: 2
따라서 문자열을 반복문에서 더하는 것은 성능상의 문제를 일으킬 수 있으므로 피해야 한다.