*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으로 돌아온다.