[자바성능튜닝이야기] 03 왜 자꾸 String을 쓰지 말라는 거야

문자열

String

  • 짧은 문자열을 더할 경우 사용
  • 제일 느림

StringBuffer

  • 스레드 세이프해야 할 경우 사용

StringBuilder

  • 스레드 세이프하지 않아도 될 때 사용
  • 가장 빠름

JDK 5.0 이상

JDK 5.0 이상부터는 컴파일러가 String으로 문자열을 더할 때 StringBuilder로 변환된다.

그래도
String 클래스를 쓰는 대신 스레드와 관련이 있으면 StringBuffer
스레드 안전 여부와 상관이 없으면 StringBuilder를 사용을 권장!

for 문에서 String 더하기를 할 경우 컴파일러가 StringBuilder로 변환은 하지만
결국엔 Stirng이 객체를 반복적으로 생성하는 것과 같이 StringBuilder 객체가 반복적으로 생성됨.

java

1
2
3
4
String str = "";
for (int i =0; i < 10 ; i ++) {
str += "a";
}

compiler 변환

1
2
3
4
String str = "";
for (int i =0; i < 10 ; i ++) {
str = (new StringBuilder(String.valueOf(str))).append("a").toString();
}

내 생각

직접 속도와 메모리 사용량을 비교해보면 좋을거 같다.
컴파일 결과도 볼 수 있으면 좋고! 나중에…

참고

Share