이펙티브 자바, 쉽게 정리하기 - item 63. 문자열 연결은 느리니 주의하라
String concatenation
+
이용하기
"a" + "b"
와 같은 방식으로 간단히 쓸 수 있지만, 성능저하가 있다.String
객체는 실제로 불변이기 때문에 새로운 객체를 만들어 더해야 한다.- '
String
타입의 변수는 잘 바뀌는데 이게 왜 불변이지?' 싶다면 스트링 풀 쉽게 이해하기 포스팅 을 참고하면 좋다.
- '
n
개의 문자열을 잇는다면n^2
에 비례하는 시간이 걸린다.
@Test
public void stringPlusTest() {
String result = "";
for (int i = 0; i < 10000; i++) {
for (String string : strings) {
result += string;
}
}
}
285ms
가 소요됐다.
StringBuilder
이용하기
@Test
public void stringBuilderTest() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
for (String string : strings) {
sb.append(string);
}
}
}
11ms
가 소요됐다.
핵심 정리
- 많은 문자열을 연결할 때는
+
방식보다는StringBuilder
를 이용하자.- 단, 멀티 스레드 환경에서는 동기화를 지원하는
StringBuffer
를 사용해야 한다.- 다만, 단일 스레드 환경에서는
StringBuilder
가 빠르다.
- 다만, 단일 스레드 환경에서는
- 단, 멀티 스레드 환경에서는 동기화를 지원하는
반응형
'Java > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바, 쉽게 정리하기 - item 65. 리플렉션보다는 인터페이스를 사용하라 (0) | 2023.06.26 |
---|---|
이펙티브 자바, 쉽게 정리하기 - item 64. 객체는 인터페이스를 사용해 참조하라 (0) | 2023.06.26 |
이펙티브 자바, 쉽게 정리하기 - item 62. 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2023.06.23 |
이펙티브 자바, 쉽게 정리하기 - item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2023.06.22 |
이펙티브 자바, 쉽게 정리하기 - item 60. 정확한 답이 필요하다면 float 과 double 은 피하라 (0) | 2023.06.22 |