Stringbuffer

jinkyung·2021년 1월 13일
0

JAVA

목록 보기
7/29

*StringBuffer, StringBuilder

:jdk 1.5 이후 등장한 클래스 (차이가 거의 없다.)

자기 자신이 바뀐다 --> 고유한 상수값이 아니다, 메모리 사용 최소화된다

String의 가장 큰 장점이자 단점 : 바꿀때마다 새로운 객체를 생성. --> 이러한 단점을 보완한 것.

package com.bit.day07;

public class Ex05 {

	public static void main(String[] args) {
		
		String st1=new String("java");
		System.out.println(st1);							//java
		System.out.println(st1.concat("1.8"));				//java1.8
		System.out.println(st1);							//java
		System.out.println("------------------------------------");
			
	
		StringBuffer st2=new StringBuffer("java");
		System.out.println(st2);						//java
		System.out.println(st2.append("1.8")); 			//java1.8
		System.out.println(st2);						//java1.8
	}
}

append() 오버로드, capacity(),

동적할당(자신의 사이즈를 스스로 늘린다) but 한번 늘어나버리면 다시 줄어들지 않는다.

public class Ex06 {

	public static void main(String[] args) {
		StringBuffer st1=new StringBuffer();         //default capacity=16
		System.out.println(st1.capacity());   		//버퍼의 사이즈 16 출력

		StringBuffer st2=new StringBuffer(6);				//버퍼의 사이즈로 6을 준다
		System.out.println(st2.capacity()); 				//6 출력
		StringBuffer st3=new StringBuffer("java");			//4+16=20
		System.out.println(st3.capacity());					//20출력. (여유공간 16은 무조건 확보)

		System.out.println("---------------------------------");
		StringBuffer st4=new StringBuffer(6);
		System.out.println(st4.append("java"));				//java 출력.  concat 또는 +의 역할
		System.out.println(st4.capacity());					//6 
		System.out.println(st4);							//java
		System.out.println(st4.append(1));					//java1
		System.out.println(st4.capacity());					//6
		System.out.println(st4.append(2));					//java12
		System.out.println(st4.capacity());					//6
		System.out.println(st4.append(3));					//java123 - 7개
		System.out.println(st4.capacity());					//14 출력 - 사이즈를 넘어가니 공간 확장됨
		System.out.println(st4.append("1234567"));			//java1231234567
		System.out.println(st4.capacity());					//14
		System.out.println(st4.append(1));					//java12312345671
		System.out.println(st4.capacity());					//30 출력.
		//늘어나는 양 : 넘어서는 순간의 두 배 --> 비약적으로 너무 커짐. 주의필요
	}
}

delete(int start, int end)

	//	StringBuffer st1="";			//string을 Stringbuffer에 주는것이므로 안된다 (can't convert)

		StringBuffer st1=new StringBuffer("1234567890");
		System.out.println(st1.delete(1, 4));		//234 지워짐

getchars(srcBegin, srcEnd, dst, dstBegin)

       	StringBuffer st1=new StringBuffer("1234567890");		
        char[] ch={'a','b','c','d'};
		st1.getChars(1, 3, ch, 1);
		System.out.println(java.util.Arrays.toString(ch));      //[a, 2, 3, d]

insert(offset, b) / reverse()

StringBuffer st1=new StringBuffer("1234567890");		
System.out.println(st1.insert(1, "ab"));                //1ab23456789
System.out.println(st1.insert(11,"0"));				//1ab234567890 - 제일 끝에도 삽입 가능

System.out.println(st1.reverse());		//098765432ba1

setCharAt()

		st1.setCharAt(0, 'A');					//void이므로 system.out.println() 사용안된다.
		System.out.println(st1); 				//A98765432ba1

setLength()

		st1.setLength(50);           //내가 준 수의 값으로 늘어나는 것이 아니라 26의(원래 사이즈) 2배인 54로 늘어난다.
		System.out.println(st1.capacity());           //54
		st1.setLength(100);			//2배의 양을 넘어섰을 때는 내가 준 값으로 늘어난다.
		System.out.println(st1.capacity());			//110

trimToSize() - 적절한 상황에서 이용해야한다

		st1.trimToSize();		//현재 값이 있는 값까지의 사이즈, 즉 비어있는 버퍼사이즈를 날려버린다.
		System.out.println(st1.capacity()); 			//12 (26-->12)
		System.out.println(st1.append(2));				//A98765432ba12
		System.out.println(st1.capacity()); 			//26으로 돌아온다.

0개의 댓글

관련 채용 정보