* 이 글은 책 <자바의 정석 3판 - 남궁성>을 공부한 내용을 바탕으로 작성한 글입니다.
자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
o1.equals(o2)
str1.hashCode()
str1.toString()
original.clone()
new Card().getClass()
String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다. StringBuffer는 멀티쓰레드에 안전하도록 동기화되어 있다. StringBuffer의 동기화는 불필요하게 성능만 떨어뜨리게 되기 때문에 쓰레드의 동기화만 뺀 StringBuilder가 새로 추가되었다.
StringBuffer sb;
sb = new SrtingBuffer();
sb.append("abc");
StringBuilder sb;
sb = new StringBuilder();
sb.append("abc");
String | StringBuffer | StringBuilder |
---|---|---|
String은 불변 객체(immutable)입니다. 문자열을 만들면 그 값을 변경할 수 없습니다. 새로운 문자열을 만들 때마다 새로운 객체가 생성됩니다. 문자열 연산 시 새로운 객체가 생성되므로 메모리 사용량이 증가할 수 있습니다. 멀티스레드 환경에서 안전합니다. | StringBuffer는 가변 객체(mutable)입니다. 문자열을 변경할 수 있습니다. 문자열 연산 시 기존 객체를 수정합니다. 멀티스레드 환경에서 동기화(synchronized)를 지원하여 스레드 안전합니다. 동기화로 인해 성능이 저하될 수 있습니다. | StringBuilder는 가변 객체(mutable)입니다. 문자열을 변경할 수 있습니다. 문자열 연산 시 기존 객체를 수정합니다. 멀티스레드 환경에서 동기화를 지원하지 않습니다. 동기화가 필요 없어 StringBuffer보다 성능이 좋습니다. |