반응형
StringBuffer클래스
String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경 가능
내부적으로 문자열 편집을 위한 버퍼를 가지고 있고 인스턴스 생성할 때 크기 지정가능
버퍼 크기를 지정하지 않으면 16으로 설정
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class StringBufferEx1 {
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));
// StringBuffer의 내용을 String으로 변환
String s = sb.toString(); // String s = new String(sb);와 같음
String s2 = sb2.toString();
System.out.println("s.equals(s2) ? " + s.equals(s2));
}
}
|
cs |
출력
sb == sb2 ? false
sb.equals(sb2) ? false
s.equals(s2) ? true
String클래스 equals()메소드 오버라이딩 O
StringBuffer클래스 equals()메소드 오버라이딩 X
toString()메소드 오버라이딩 O --> String으로 변환
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class StringBufferEx2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("01");
StringBuffer sb2 = sb.append(23); // 23을 추가한 문자열을 sb2에 저장 sb, sb2는 같다
sb.append('4').append(56); // char형 '4'와 int형 56을 추가 -> 문자열로 변환되어 저장
StringBuffer sb3 = sb.append(78); // 78을 추가한 문자열을 sb3에 저장 sb, sb2, sb3는 같다
sb3.append(9.0); // 실수형을 추가 --> 문자열로 변환되어 저장
// StringBuffer를 String형으로 변환해 출력
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"추가
System.out.println("sb =" + sb.replace(6, sb.length(), "END")); // 6번째 자리부터 끝자리요소를 END로 변경
System.out.println("capacity="+sb.capacity()); // sb의 버퍼크기
System.out.println("length="+sb.length()); // sb에 저장된 문자열 길이
}
}
|
cs |
출력
sb =0123456789.0
sb2=0123456789.0
sb3=0123456789.0
sb =01234567890
sb =01267890
sb =012abc67890
sb =012abcEND
capacity=18
length=9
--> capacity가 18인 이유
3행에서 StringBuilder인스턴스를 생성할 때 문자열 "01"을 매개변수로 생성해 16(용량) + 2(문자열길이) = 18
StringBuilder클래스
StringBuffer클래스와 똑같은 기능
StringBuffer - 멀티쓰레드에 안전하도록 동기화되어 있음, 멀티쓰레드로 작성 안 된 프로그램에선 성능이 떨어짐
StringBuilder - StringBuffer에서 쓰레드의 동기화만 뺌
'아카이브 > 자바의 정석' 카테고리의 다른 글
| 9장 java.lang패키지와 유용한 클래스 20201024 (0) | 2020.10.24 |
|---|---|
| 9장 java.lang패키지와 유용한 클래스 20201023 (0) | 2020.10.23 |
| 9장 java.lang패키지와 유용한 클래스 20201017 (0) | 2020.10.17 |
| 9장 java.lang패키지와 유용한 클래스 20201014 (0) | 2020.10.14 |
| 8장 예외처리 20201012 (0) | 2020.10.12 |