1. String vs StringBuffer, StringBuilder
String
- immutable(불변함)
- String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
- +연산 혹은 concat메소드를 이용해 value가 변경이 되어도 기존 문자열에 붙는 것이 아니라 새로운 String 객체를 만든다.
- 따라서 기존 객체는 GC에 의해 회수된다.
StringBuffer, StringBuilder
- mutable(가변)
문자열 연산으로 기존 객체의 공간이 부족해지면, 버퍼 크기를 늘려서 유연하게 동작한다.
2. StringBuffer vs StringBuilder
- 두 클래스가 제공하는 메소드는 서로 동일하다.
- 그러나 StringBuffer는 메소드에 Synchronized 키워드가 존재하여 멀티쓰레드 환경에서도 동기화를 지원한다.
- 따라서 StringBuffer는 Thread safe하다고 말할 수 있다.
그리고 String 객체의 연산은 객체를 새롭게 만들기 때문에 StringBuffer나 StringBuilder에 비해 퍼포먼스가 좋지 않다고 알고있었다.
그러나 java 5버전에서 부터 컴파일 시 String을 StringBuilder로 바꿔준다고 한다.
따라서 String이나 StringBuilder나 성능차는 없는 걸로…..
실제로 돌려보니 성능차가 엄청나게 남....
StringBuilder : 5ms
StringBuffer : 6ms
String concat: 5ms
String +연산: 4816ms
StringBuilder > StringBuffer >>>>>>>>>>>>>>>>String
왠만하면 StringBuilder, StiringBuffer 쓰는걸로...
'Java' 카테고리의 다른 글
java8 functionalInterface Function (5) | 2017.01.10 |
---|---|
Lambda Expression, 람다 예제 (0) | 2017.01.05 |
Spring DI와 IoC [ Dependency Injection + Inversion of Control ] 요약 (0) | 2016.12.23 |
엔티티 생명주기 (0) | 2016.12.21 |
String 객체에 대한 개념 (0) | 2016.10.12 |