- StringBuilder, StringBuffer = 가변클래스( 기존의 자리에서 값이 변경되는 개념)
* 두개의 클래스 모두 생성자나 메소드가 동일함
* 유일한 차이점 동기화 유무 => 속도차이
*동기화 : 한자원에 대해 여러 스레드가 접근하려 할 때 한 시점에서 하나의 스레드만 사용될 수 있도록 하는 것
>StringBuilder : 동기화 제공 x -> 속도가 빠름
> StringBuffer : 동기화 제공 o -> 속도가 느림
** StringBuilder
- 리터럴값 바로 대입 불가
StringBuilder sb1 = "hello"; (x)
-객체 생성시 처음에 16개의 문자들을 저장할 수있는 버퍼가 내부적으로 생성
public void method1() {
//1.기본 생성자로 생성
StringBuilder sb1 = new StringBuilder();
System.out.println("sb1의 수용량 : "+ sb1.capacity()); //16
System.out.println("sb1 문자열의 길이 : "+ sb1.length());//0
//2.정수값 하나 전달가능한 매개변수 생성자로 생성
StringBuilder sb2 = new StringBuilder(30);
System.out.println("\nsb2의 수용량 : "+sb2.capacity());//30 => 전달한 정수값 크기만큼의 수용량 생성됨
System.out.println("sb2 문자열의 길이 : "+ sb2.length());//0
//3.문자열 하나 전달가능한 매개변수 생성자로 생성
StringBuilder sb3 = new StringBuilder("반가워!!");
System.out.println("\nsb3의 수용량 : "+ sb3.capacity()); //21 // 기본값 16+6 =21
System.out.println("sb3 문자열의 길이 : "+ sb3.length()); //5
}
- StringBulider 는 가변클래스로 값 변경시 주소값이 변경되지 않음 (즉 , 그자리에서 수정)
public void method2() {
StringBuilder sb = new StringBuilder("반가워!");
System.out.println("sb : " + sb); //반가워!
System.out.println("수용량 : "+ sb.capacity()); //20
System.out.println("문자열의 길이 : "+ sb.length()); //4
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367
System.out.println("======================");
//1. (붙이다 추가하다)append(String str) : StringBuilder타입으로 반환
// 기존의 문자열에 새로운 문자열을 추가하고 싶을때 사용
sb.append("안녕!");
System.out.println("sb : " + sb); //반가워!안녕!
System.out.println("수용량 : "+ sb.capacity()); //20
System.out.println("문자열의 길이 : "+ sb.length()); //7
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
sb.append("다들 조금만 힘내세요!!!");//14글자 (수용범위 초과)
System.out.println("sb : " + sb); // 반가워!안녕!다들 조금만 힘내세요!!!
System.out.println("수용량 : "+ sb.capacity()); //42 (기존의 수용량 *2 + 2)
System.out.println("문자열의 길이 : "+ sb.length()); // 21
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
//2.delete(int start, int end): 반환형 StringBuilder
// 시작인덱스<= <끝인덱스 범위의 문자열 삭제
sb.delete(2, 5); // 워, 녕
System.out.println("sb : " + sb); // 반가녕!다들 조금만 힘내세요!!!
System.out.println("수용량 : "+ sb.capacity()); //42
System.out.println("문자열의 길이 : "+ sb.length()); // 18
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
//3.insert(int offset,String str) : StringBuilder
// offset위치에 str추가시켜주는 메소드
sb.insert(1, "ㅎㅎㅎ");
System.out.println("sb : " + sb); // 반ㅎㅎㅎ가녕!다들 조금만 힘내세요!!!
System.out.println("수용량 : "+ sb.capacity()); //42
System.out.println("문자열의 길이 : "+ sb.length()); // 21
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
//4.reverse() :StringBuilder
// 기존의 문자열을 역으로 바꿀때
sb.reverse();
System.out.println("sb : " + sb); // !!!요세내힘 만금조 들다!녕가ㅎㅎㅎ반
System.out.println("수용량 : "+ sb.capacity()); //42
System.out.println("문자열의 길이 : "+ sb.length()); // 21
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
//메소드체이닝 == 메소드 연이어서 호출
sb
.append("ㅋㅋㅋ")
.delete(0,4)
.reverse()
.insert(2,"ㄱㄱㄱ");
System.out.println("sb : " + sb); // ㅋㅋㄱㄱㄱㅋ반ㅎㅎㅎ가녕!다들 조금만 힘내세
System.out.println("수용량 : "+ sb.capacity()); //42
System.out.println("문자열의 길이 : "+ sb.length()); // 23
System.out.println("주소값 : "+System.identityHashCode(sb)); //1562557367 주소값 변경안됨
System.out.println("======================");
}
'JAVA' 카테고리의 다른 글
10. API _ StringTokenizer (0) | 2022.11.04 |
---|---|
10.API_String 메소드 (0) | 2022.11.04 |
10. API _String (0) | 2022.11.04 |
10. API _ Math (0) | 2022.11.04 |
9_3. 다형성 _ 인터페이스 (0) | 2022.11.03 |