배열은 길이 변경불가. 공간이 부족하면 새로운 배열 생성해야 한다.
① 내가 길이 5인 배열에 6을 넣고싶은데 공간이 부족하다 → 새로운 배열을 생성해서 넣어준다(보통 길이 2배 짜리로 생성)
➁ arr내용을 tmp에 복사
➂ 참조변경 (원래 arr와 이어져있던 공간부족한 배열의 참조를 끊고, tmp[0]~를 가리키도록 참조를 변경해줘야한다 = 0x100자리에 0x200을 넣어준다.)
StringBufffer는 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해야한다.
int length에 적절한 크기를 줘서 적어도 저장할 공간이 부족해서 2배로 늘려주고 복사하는 복잡한 과정이 없도록 해야한다.
만약 String str = "abc"; 라면 str.length()=3, + 16하면 길이가 19인 char[]배열이 만들어진다.
StringBuffer의 변경
StringBuffer는 String과 달리 내용 변경이 가능하다.
append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환한다.
delete() 삭제 메서드
insert() 삽입 메서드
반환타입이 다 StringBuffer
계속 .append().append() 이렇게 써도 된다(=메서드 체이닝). 성능상 차이는 없고 코드의 간결함은 챙길 수 있다.
StringBuffer의 비교
StringBuffer는 equals()가 오버라이딩 되어있지 않다.
따라서 내용비교가 아닌 주소비교를 한다.
StringBuffer을 String으로 변환 한 후에 equals()로 비교해야 한다.
StringBuffer의 생성자와 메서드
보통 StringBuffer(int length)로 원하는 크기만큼의 배열을 만들어 사용한다.