③ StringBuffer클래스
: String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다.
- StringBuffer의 생성자
public StringBuffer(int length) { //적절한 크기로 지정해야 한다.
value= new char[length];
shared=false;
}
public StringBuffer() {
this(16); //버퍼의 크기를 지정하지 않으면 버퍼의 크기는 16이 된다.
}
public StringBuffer(String str) {
this(str.length()+16); //지정한 문자열의 길이보다 16이 더 크게 버퍼를 생성한다.
append(str);
}
→ 그렇기 때문에 문자열의 길이를 고려하여 버퍼의 길이를 충분히 잡아주는 것이 좋다.
- StringBuffer의 변경
: String과 달리 StringBuffer는 내용을 변경할 수 있다.
StringBuffer sb=new StringBuffer("abc"); //StringBuffer를 선언하고
sb.append("123"); //append는 끝에 문자열을 추가하는 메서드
StringBuffer sb2= sb.append("Hello"); //sb의 내용뒤에 "Hello"를 추가한다.
System.out.println(sb); //abc123Hello
System.out.println(sb2);//abc123Hello
→ sb의 내용 뒤에 123을 추가하여 abc123으로 출력된다.
→ sb와 sb2가 모두 같은 StringBuffer인스턴스를 가리키고 있으므로 같은 주소를 반환하여 sb2에도
같은 내용이 저장되어 출력된다.
-StringBuffer의 비교
StringBuffer sb =new StringBuffer("abc");
StringBuffer sb2=new StringBuffer("abc");
System.out.println(sb==sb2); //false
System.out.println(sb.equals(sb2)); //false
→ StringBuffer는 equals()가 오버라이딩되어 있지 않다.
→ 반면에 toString()은 오버라이딩되어 있어서 StringBuffer인스턴스에 toString()을 호출하면 담고있는 문자열을 반환한다.
만일 StringBuffer클래스의 문자열을 비교하고 싶다면
class JavaJungsuk_StringBuffer_Ex9_11 {
public static void main(String[] args) {
StringBuffer sb =new StringBuffer("abc");
StringBuffer sb2=new StringBuffer("abc");
System.out.println("sb==sb2?"+(sb==sb2));
System.out.println("sb.equals(sb2)?"+sb.equals(sb2));
String s =sb.toString();
String s2=sb.toString();
System.out.println("s.equals(s2)?"+equals(s2));
}
}
결과
sb==sb2?false
sb.equals(sb2)?false
s.equals(s2)?true
→ StringBuffer를 String으로 변환 후 equals()로 비교해야 한다.
- StringBuffer의 생성자와 메서드
class JavaJungsuk_StringBuffer_Ex9_12 {
public static void main(String[] args) {
StringBuffer sb =new StringBuffer("01");
StringBuffer sb2=new StringBuffer(23);
sb.append('4').append(56);
StringBuffer sb3=sb.append(78);
sb3.append(9.0);
System.out.println("sb="+sb);
System.out.println("sb2="+sb2);
System.out.println("sb3="+sb3);
System.out.println("sb="+sb.deleteCharAt(10)); //인덱스 10자리의 문자 제거.
System.out.println("sb="+sb.delete(3, 6)); //인덱스 3~5자리의 문자 제거.
System.out.println("sb="+sb.insert(3, "abc")); //인덱스 3의 자리에 abc 문자 추가.
//인덱스 6부터 sb.length()까지의 문자를 "END"로 바꿈
System.out.println("sb="+sb.replace(6, sb.length(), "END"));
System.out.println("capacity="+sb.capacity()); //문자열이 담길 Buffer크기 반환.
System.out.println("length="+sb.length()); //문자열 길이 반환.
}
}
결과
sb=0123456789.0
sb2=0123456789.0
sb3=0.123456789.0
sb=01234567890
sb=01267890
sb=012abc67890
sb=012abcEND
capacity=18
length=9
0 | 1 | '2' | '3' | '4' | '5' | '6' | '7' | '8' | 9 | . | 0 |
'프로그래밍 > Java' 카테고리의 다른 글
Java_날짜와 시간&형식화 (0) | 2022.12.18 |
---|---|
Java_Java.lang패키지와 유용한 클래스(4)_Math클래스와 메서드, 래퍼 클래스, 오토박싱&언박싱 (0) | 2022.12.14 |
Java_java.lang패키지와 유용한 클래스(2)_String클래스 (0) | 2022.12.07 |
Java_java.lang패키지와 유용한 클래스(1)_Object클래스의 메서드 (0) | 2022.12.04 |
Java_예외처리(2)_멀티 catch블럭, 예외 발생시키기, 체크드예외와 언체크드예외, 메서드에 예외 선언하기, finally블럭 (0) | 2022.11.30 |