Java StringBuilder, StringBuffer




결과

결과





코드

public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();	// 초기화
		sb.append("abcd");	// abcd
		sb.insert(2, "zzzz");	// abzzzzcd
		sb.delete(6,8);			// abzzzz
		sb.replace(0, 2,  "xxxx");	// xxxxzzzz
		sb.reverse();	// zzzzxxxx
		sb.setCharAt(4, 'y');	// zzzzyxxx
		
		String s = sb.toString();
		String s2 = sb.substring(5);
		
		System.out.println("String : " + s);
		System.out.println("String2 : " + s2);
		
	}





StringBuilder()

이미지1

- String은 덧셈 연산처럼 수정하였을 때는 이미지1 처럼 기존의 String 객체를 수정하는 것이 아니라 수정한 새 String 객체를 만들어 연결한다.


- 위 같은 과정이 빈번히 반복되다보면 쓰레기 객체가 늘어나 성능을 안좋게 한다.


- 때문의 StringBuilder를 사용하면 버퍼(데이터를 임시로 저장)에 문자열을 저장, 추가, 수정, 삭제 작업을 추가적인 객체를 생성않으며 할 수 있다.


- 사용할 수 있는 메소드는 String에서도 있는 replace, substring들도 있다. 그리고 append, delete, insert와 같은 추가, 삭제하는 메소드들이 있다.


- 수정 작업이 끝난 후 String 변수에 저장하고자 하면은 toString()을 사용하면 된다.





StringBuffer() vs. StringBuilder()

- StringBuffer()와 StringBuilder()의 사용법은 동일하다.


- 단, StringBuffer()은 멀티 스레드 환경에서 사용할 수 있어 스레드에 safe(안전)하다.


- 반면에 StringBuilder()는 단일 스레드 환경에서 사용하도록 설계되어있다.


- 멀티 스레드 환경이 아니라면 StringBuilder()를 사용하는 것이 더 성능이 좋다.





참조

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html


https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html







+ Recent posts