참조 - 배열을 매개값으로 주고 메서드 호출
참조(Reference)
참조타입 - 객체 번지를 참조하는 타입
메서드를 호출하고 배열을 매개변수로 전달
main() 메서드 -> refExBest() 메서드 -> test() 메서드
main() 메서드 -> refEx6() 메서드 -> test0() 메서드
test1 메서드 - 매개변수 없이 int형 배열 반환
test2 메서드 - int형 배열이 매개변수가 되고 반환값 없는 메서드 호출
String vs StringBuilder
StringBuilder
한 번 생성된 String 클래스의 인스턴스는 여러 개의 문자열을 더할 때, 매번 새로운 인스턴스를 생성해야 한다. 만약 수많은 문자열이 있다면, 모든 문자열을 더하는 작업이 필요하다면, 인스턴스의 생성 과정은 문자열의 개수만큼 많아진다.
이런 문제를 해결하기 위해 StringBuilder를 사용한다
StringBuilder의 객체를 생성한 후, append() 메서드로 연결하고자 하는 문자열을 넣어 StringBuilder 객체를 통해 호출하여 사용한다. 연결한 뒤, 문자열 변수를 초기화하고자 한다면, toString() 메서드로 할당할 수 있다
StringBuffer
String 클래스의 인스턴스는 한 번 생성되면 그 값을 읽기만 할 수 있고, 변경할 수 없다.
이런 문제를 해결하기 위해 StringBuffer 클래스의 인스턴스를 사용한다. StringBuffer 클래스의 인스턴스는 값을 수정하거나, 추가할 수 있다.
StringBuffer 클래스는 내부적으로 독립적인 공간 버퍼를 가진다. 버퍼의 크기는 16개의 문자를 저장할 수 있는 크기이면, 생성자를 통해 크기를 설정할 수 있다. 하지만 인스턴스 생성시 사용자가 설정한 크기보다 16개의 문자를 저장할 수 있는 여유 공간을 가지고 생성한다
StringBuffer를 사용하는 이유
String 인스턴스의 문자열은 덧셈 연산자로 결합할 수 있다. 이 때, 합쳐진 문자열은 새로운 String 인스턴스를 생성한다. 덧셈 연산자를 통해 문자열과 함께 사용하면 자동으로 문자열 형변환이 이뤄지고 문자열이 결합된다. 즉, 문자열을 결합할수록 공간이 낭비될 뿐만 아니라 실행 속도도 매우 느려진다.
따라서 StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로 공간의 낭비도 없으면 속도도 매우 빠르다
StringBuffer 메서드
append()
- 전달받은 값을 문자열로 반환하여 해당 문자열의 마지막에 추가한다. 이 메서드는 String 클래스의 concat() 메서드와 같은 결과를 반환하지만, 속도가 훨씬 빠르다
capacity()
- StringBuffer 인스턴스의 현재 버퍼 크기를 반환한다.
delete() , deleteCharAt()
- delete() 메서드는 지정한 인덱스의 해당 부분 문자열을 제거한다.
- deleteCharAt() 메서드는 해당 인덱스의 문자 한 개만 제가할 수 있다
insert()
- 지정한 인덱스 위치에 입력 값을 문자열로 변환한 후 해당 인덱스 위치에 문자열을 추가한다. 만약 인덱스 값이 해당 문자열의 길이와 같으면 append() 처럼 해당 문자열 뒤에 삽입된다
[Java] 자바 StringBuilder와 StringBuffer 정리 및 사용법 (tistory.com)
immutable - 값이 안 바뀐다
main() 메서드 -> checkReference() 메서드 실행
str.concat("111") -> str만 "111" 추가 안되고 StringBuilder 객체만 "111"이 추가됐다.