본문 바로가기

자바 (Java)/요약

Chpt 9. java.lang 패키지, util 클래스 - 주제 2. String vs. StringBuffer 클래스

728x90
  String 클래스 StringBuffer 클래스
문자열 크기 생성할 때 문자열의 크기와 같음 생성자를 통해 지정 가능
(1) 정수값 인자: 정수값
(2) 인자가 없을 경우 16
(3) 문자열 인자: 문자열의 크기 + 16 
변경 가능 여부 X (immutable) O (mutable)
비교 (==) 객체 주소 비교
equals 오버라이딩 O, 값 비교 오버라이딩 X, 객체 주소 비교
=> (1) toString(), (2) equals()

 

1. String 클래스

 

1) 변경 불가 (immutable) vs. 변경 가능 (mutable) 클래스

 

변경이 불가하다는 말은 연산을 할 때마다 새로운 인스턴스가 생성된다는 말이다. 따라서 추가, 변경, 삭제 등의 작업을 할 때는 StringBuffer 클래스를 사용하도록 하자.

 

[예 1] 문자열 리터럴 vs. 문자열 인스턴스

 

String str1 = "abc"; // 문자열 리터럴 (1)

String str2 = "abc"; // 문자열 리터럴 (2)

String str3 = new String("abc"); // 문자열 인스턴스 (3)

String str4 = new String("abc"); // 문자열 인스턴스 (4)

 

위 네 문장으로 생성된 인스턴스의 개수는 3개이다. 또한 (1), (2)와 같은 방법을 주로 사용한다.

 

  (1) vs. (2) (3) vs. (4)
== true false
equals true true

 

 

[참고 1] 자바에서는 길이가 0인 배열은 {} 또는 new 타입[0]로 초기화할 수 있다. 

 

[참고 2] 빈 문자열은 "", 빈 문자는 ' '로 초기화한다. 

 

2) 자주 사용하는 생성자와 메서드

 

메서드 / 설명 참고
String(String s) 생성자 대신 주로 문자열 리터럴을 사용한다.
String(char[] value)
String(StringBuffer buf)
char charAt(int index)  
int compareTo(String str)
같으면 0, 왼쪽이 작으면 -1, 오른쪽이 작으면 1
정렬에 주로 사용되며 Chpt. 11 컬렉션 프레임워크에서 사용된다.
String concat(String str)  
boolean contains(CharSequence s) CharSequence는 인터페이스이다.
boolean endswith(String suffix)  
boolean equals(Object obj)  
boolean equalsIgnoreCase(String str)  
int indexOf(int ch)
int indexOf(int ch, int pos)
int indexOf(String str)
 
 
 
String intern()
문자열을 상수풀에 등록
 
int lastIndexOf(int ch)
int lastIndexOf(String str)
 
 
int length()  
String replace(char old, char nw)
String replace(CharSequence old, CharSequence nw)
 
 
String replaceAll(String regex, String replacement)  
String replaceFirst(String regex, String replacement)  
String[] split(String regex)
String[] split(String regex, int limit)
 
 
boolean startsWith(String prefix)   
String substring(int begin)
String substring(int begin, int end)
 
String toLowerCase()  
String toString()  
String toUpperCase  
String trim()  
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(float f)
static String valueOf(double d)
static String valueOf(Object o)
 
String join(CharSequence deli, CharSequence... ele) StringJoiner 클래스를 사용할 수도 있다.

StringJoiner sj = new StringJoiner(",", "[", "]");
String[] strArr = {"aaa", "bbb", "ccc"};

for (String s : strArr)
    sj.add(s);

System.out.println(sj.toString()); // [aaa, bbb, ccc]

 

2. StringBuffer 클래스

 

1) 자주 사용하는 생성자와 메서드

 

메서드 / 설명 참고
StringBuffer()  
StringBuffer(int length)  
StringBuffer(String str)  
StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[] str)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(Object obj)
StringBuffer append(String str)
 
int capacity()  
int length()  
char charAt(int index)  
StringBuffer delete(int start, int end)  
StringBuffer deleteCharAt(int index)  
StringBuffer insert(int pos, boolean b)
StringBuffer insert(int pos, char c)
StringBuffer insert(int pos, char[] str)
StringBuffer insert(int pos, double d)
StringBuffer insert(int pos, float f)
StringBuffer insert (int pos, int i)
StringBuffer insert(int pos, long l)
StringBuffer insert(int pos, Object obj)
StringBuffer insert(int pos, String str)
 
StringBuffer repalce(int start, int end, String str)  
StringBuffer reverse()  
void setCharAt(int index, char ch)  
void setLength(int newLength)  
String toString()  
String substring(int start)
String substring(int start, int end)
 

 

추가, 변경, 삭제 등의 변경을 담당하는 메서드의 반환 타입이 StringBuffer, 즉 자기 자신을 반환하기 때문에 다음과 같이 메서드의 연속적인 호출이 가능하다.

 

StringBuffer sb = new StringBuffer("abc");
sb.append("efg");
sb.replace(0, 2, "123");
StringBuffer sb = new StringBuffer("abc");
sb.append("efg").replace(0, 2, "123");

 

[참고] StringBuffer vs. StringBuilder

 

  동기화 처리 데이터 보호 사용
StringBuffer O O 멀티 쓰레드
StringBuilder X X 싱글 쓰레드

 

반응형