클래스 |
사용할 상황 |
String |
짧은 문자열을 더할 경우 사용한다. |
StringBuffer |
스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하면 좋다. 만약 클래스에 static으로 선언된 문자열을 변경하거나, singleton으로 선언된 클래스에 문자열일 경우에는 이 클래스를 사용해야만 한다. |
StringBuilder |
스레드에 안전한지의 여부와 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다. 만약 메서드 내에 변수를 선언했다면, 해당 변수는 그 메서드 내에서만 살아 있으므로, StringBuilder를 사용하면 된다. |
버전에 따른 차이
JDK 5.0 이상을 사용한다면 결과가 약간 달라진다.
public class Test { String str = "Here " + "is " + "a " + "sample."; public Test() { int n = 10; String s = "Here " + "is " + n + " samples."; } }
JDK 1.4 사용해서 컴파일 -> JAD로 역 컴파일한 소스
public class Test { public Test() { str = "Here is a sample."; int n = 10; String s = "Here " + "is " + n + " samples."; } String str; }
역 컴파일한 소스를 보면 자바 컴파일러가 문자열 더한 것을 컴파일할 때 알아서 더해 놓고 있다. 그래도 중간에 int나 다른 객체가 들어가게 되면 위의 예와 같이 그대로 더하도록 되어 있다. 어차피 필요 없는 객체는 생성이 된다는 의미이다.
JDK 5.0
public class Test { public Test() { str = "Here is a samples."; int n = 10; String s = (new StringBuilder("Here is ")) .append(n).append(" samples.").toString(); } String str; }
문자열을 그냥 더하도록 프로그래밍했다면, 컴파일할 때 위와 같이 변환된다. 개발자의 실수를 어느 정도는 피할 수 있게 된다는 뜻이다.
[ 출저 ] - 자바 성능 튜닝 이야기 Page 49 - 56
'JAVA Platform > JAVA' 카테고리의 다른 글
[JAVA] - 파일(File) 무조건 생성하기 (0) | 2014.09.19 |
---|---|
[JAVA] - CharSequence 사용법 (0) | 2014.09.08 |
[JAVA] - Collection 관련 클래스의 동기화 (0) | 2014.09.08 |
[JAVA] - Collection 및 Map 인터페이스의 이해 (0) | 2014.09.08 |
[JAVA] - JFrame, Frame 종료 이벤트 (0) | 2014.09.08 |