728x90

1. String

① String은 변수의 문자를 할당해줄 때 문자 하나하나씩 할당해주는 로직이 뒷단에 내포되어 있다. 

(TMI : 여기서 문자형(char)은 value 그 자체를 할당하는데 문자형의 길이만큼 문자열이 할당된다.)

public void strTest(String[] arrStr) {
    String str = "";
    for(String strFor : arrStr) {
    	str += strFor;
    }
}

② 해당 코드의 시간복잡도는 O(xn^2) 이다. 왜냐하면

문자열 str 변수의 아무것도 할당하지 않을 때 x가 되고 문자열 배열 'arrStr'의 값을 반복해서 문자의 담을 때 이전에 담았던 문자까지 할당해야 하므로 ( 2x, 3x... nx )가 된다.

 

그래서 비효율적이어서 자바에서는 문자를 더하는 처리를 할 때 StringBuilder를 제공하고 있다.

2. StringBuilder

① StringBuilder는 클래스안에 배열공간을 미리 만들어놓고 append함수로 문자를 추가 할당하는 경우 해당 배열공간의 문자자체값을 추가하기 때문에 그때그때 새로운 문자를 추가하지 않아 String과는 다르다.

그래서 시간복잡도와 공간복잡도가 String보다 효율적이다.(코드는 3번 코드 참고)

3. StringBuilder와 StringBuffer 차이

public static void main(String[] args) {
	StringBuilder sbd = new StringBuilder("1+1=");
	StringBuffer sbf = new StringBuffer("2+2=");

	sbd.append("2");
	sbf.append("4");

	System.out.println(sbd);
	System.out.println(sbf);
}

 

위 코드블럭 결과값

위 코드와 같이 StringBuilder와 StringBuffer의 사용법은 같다.

하지만 차이가 있는데 그것은 StringBuilder는 동기화를 제공하지 않지만, StringBuffer는 동기화를 제공한다

 

728x90
TOP