개발/Java
String, StringBuffer, StringBuilder, 문자 리터럴 비교
ksy0314
2024. 3. 11. 15:19
코딩 테스트를 진행하던 중
반복적인 문자 연산 문제가 나왔다.
String의 경우 문자열 연산시 새로운 String 객체를 생성하기에
오버해드가 크다 생각하여 StringBuffer를 사용해 보았다.
1
2
3
4
5
6
7
8
9
10
11
|
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
//String output = "a" + "b" + "c";
StringBuffer output = new StringBuffer("a");
output.append(b);
output.append(c);
System.out.println(output);
}
}
|
그런데 왠걸 연산에 소모되는 시간이 오히려 증가된것이 아닌가?
이유는 다음과 같았다.
Java에서 문자열 리터럴 간의 연산은
String 객체를 생성하여 수행하지 않고
컴파일 시간에 최적화되어 처리된다는 것이였다.
즉
문자열 리터럴간의 연산은 String간의 연산과 다르게 처리된다는것이다.
오버헤드(시가, 메모리)를 비교해보자면 다음과 같다
문자 리터럴 < StringBuffer, StringBuilder < String
결론 :
최고의 성능을 내고 싶다면
문자 리터럴간의 연산으로 처리하자.