문자열을 합칠 때 +, append, concat으로 한다. 하지만 가끔 + 연산자로 합친 문자열을 (String) “”처럼 형변환 해주는 경우가 있다. 그럼 연산자로 합치는 것과 메소드를 사용하는 것은 무슨 차이일까?
+ 연산자
- String 객체는 불변이기 때문에 각각 합칠 때마다 새로 메모리에 할당된다. 여러 문자열을 합친다고하면 과도하게 메모리를 차지하게 돼버린다.
- 편리하지만 성능은 좋지 않은 방식이다.
- Java1.6부터는 StringBuilder, StringConcatFactory 또는 StringBuffer 을 이용해 문자열을 변환 시킨 뒤, append로 문자열을 더하고 다시 toString 함수로 문자열로 반환해준다.
String a = "concat과 "
String b = "append의 차이"
System.out.println(a + b);
// concat과 append의 차이
concat
- Concat은 합친 문자열을 new String()해서 생성해준다.
- StringBuilder는 append()로 문자열을 합칠 수 있다. String으로 합치는 것과 다른 점은, immutable인 String은 수정하려면 String을 다시 대입해야하지만, StringBuilder는 메모리 할당 과정 없이 수정가능하다는 것이다.
- StringBuffer는 StringBuilder와 호환 가능하지만 thread-safe하다. StringBuilder는 동기화를 보장하지 않는다.
- single thread- StringBuilder
multi thread - StringBuffer
String a = "concat과 "
String b = "append의 차이"
System.out.println(a.concat(b));
// concat과 append의 차이
- 여러 개의 문자열을 더할 때는 + 연산자
두 개의 문자열을 더할 때는 concat
StringBuilder, StringBuffer 사용법
StringBuilder sb = new StringBuilder();
sb.append("StringBuilder와");
sb.append("StringBuffer의 차이");
System.out.println(sb.toString());
- append()로 합치는 것과 출력 시 toString()으로 사용해야 한다.
참고
Java 1.6에서의 String
String에 대한 다른 알아둬야할 지식을 정리해놓으셨다.
'Programming Language > Java' 카테고리의 다른 글
[Java] Optional (0) | 2022.12.12 |
---|---|
[Java] 문자열 비교 (==, equals)와 intern (0) | 2022.12.12 |
[Java] Maven, Gradle 빌드 관리 도구 (0) | 2022.12.12 |
[Java] 원의 좌표 범위 (1) | 2022.12.12 |
[Java] 타입 캐스팅 (String - int - char) (0) | 2022.12.12 |
댓글