Old Posts/Java

String vs StringBuffer vs StringBuilder

bactoria 2018. 2. 9. 01:50

속도 :    String <<<<<<<<<<<<<<<<<<<<<< StringBuffer < StringBuilder (빠름)

메모리 : String >>>>>>>>>>>>>>>>>>>>>> StringBuffer = StringBuilder (적음)

객체수 : String >>>>>>>>>>>>>>>>>>>>>> StringBuffer = StringBuilder (적음)


StringBuffer , StringBuilder는 CharSequence 인터페이스를 구현하니까



StringBuilder는 가장 빠르지만 StringBuffer를 써야할 상황도 있다.


Thread-Safety 하지 않아서 쓰레드를 사용한다거나, 사용할지도 모르는 경우에는 StringBuffer를 써야한다.


단일쓰레드에서는 StringBuilder를 사용하면된다.


StringBuilder <-> StringBuffer 변경하려면 여기!!


메모리

StringBuilder가 메모리를 적게 먹는다?

16 -> 34 -> 70 -> 142 이런식으로 2배증가했다가 2바이트 추가된다.


String은 s+= "asd" 했을 때 객체를 계쏙 생성한다.

GC가 계속 일을 해야하니까 CPU도바쁘고 메모리도많이잡아먹고 그런다ㅠ


String s = "asd" + "zxc" ;

이건 컴파일러가

String s = "asdzxc"로 바꿔준다.

성능상 아무 문제안됨


String s = "asd" + n + "zxc" ;

컴파일러가 바꾸지 않는다. (JDK5 미만)


JDK5부터는 

String s = (new StringBuilder("asd")).append(i).append("zxc").toString; 로 알아서 바꿔준다.