특징
- 객체의 주소를 저장하는 타입의 자료형
- 실제 객체는 메모리 힙 영역에 저장되고 메모리 스택 영역에서는 해당 객체의 주소를 저장한다.
- 원시 타입 자료형과는 다르게 null로 초기화가 가능하다.
- 기본 타입은 제네릭 타입에서 사용할 수 없지만, 참조 타입은 가능하다.
- 참조 타입 변수 간에 데이터를 복사할 경우 데이터의 참조(주소)가 복사된다.
- 종류 : 배열 타입, 열거 타입, 클래스, 인터페이스
String
- 문자열 연산이 적고 멀티쓰레드 환경일 경우에 사용하는 자료형
- 문자열이 담겨 있는 String 변수에 문자열 추가 연산을 하게 되면
같은 객체가 아닌 메모리 힙 영역에 새로운 객체를 만든다. - 기존에 있던 객체는 가비지 컬렉션의 메모리 해제를 기다린다.
- 문자열을 합쳐주는 + 연산자를 많이 사용할수록
String 객체의 수가 늘어나기 때문에 프로그램 성능이 느려진다. - StringBuffer나 StringBuilder는 buffer의 크기를 초기에 설정해서
String객체보다 생성 속도가 많이 느리기 때문에 연산이 많지 않은 경우에 사용하는 것이 좋다.
= 단순 조회의 경우에 사용하는 것이 좋다. - 문자열 리터럴이 동일하면 String 객체를 공유
= 선언한 변수가 달라도 내용물이 같으면 객체로 취급
String 메소드
- 문자 가져오기
- charAt(n)
- 해당 객체가 가지고 있는 문자열의 n번째 인덱스의 문자를 가져온다.
- substring(n)
- 해당 객체가 가지고 있는 문자열의 n번째부터 끝까지의 문자를 가져온다.
- substring(m, n)
- 해당 객체가 가지고 있는 문자열의 n번째부터 n번째까지의 문자를 가져온다.
- charAt(n)
- 문자열 비교
- A.compareTo(B)라고 가정했을 때 같으면 0, A가 작으면 음수, A가 크면 양수 반환
- 종류
- compareTo()
- 대소문자 구분 O
- compareToIgnoreCase()
- 대소문자 구분 X
- compareTo()
- 문자열 추가
- concat()
- 부르는 코드 부분에서만 문자열이 추가되고 그 이후에는 원래의 문자열로 돌아간다.
- concat()
- 문자열 찾기
- indexOf()
- 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환, 없으면 -1
- indexOf()
- 공백 제거
- trim()
- 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거
- trim()
- 대소문자 변환
- toLowerCase()
- 모든 문자를 소문자로 변환
- toUpperCase()
- 모든 문자를 대문자로 변환
- toLowerCase()
- 문자열을 구분자로 잘라서 배열 만들기
- split(“문자열”)
- 문자열을 split 메소드에 설정한 값에 따라서 모두 나눠준 후에 배열로 리턴한다.
- split(“문자열”)
- 빈 값 체크
- isEmpty()
- 해당 객체가 비어있으면 true, 아니면 false를 반환
- isEmpty()
- 문자열의 길이 가져오기
- length()
- 해당 객체가 가지고 있는 문자열의 길이를 반환
- length()
StringBuffer
- 문자열 연산이 많고 멀티 쓰레드 환경일 경우에 사용하는 자료형
- String과 다르게 문자열 연산을 해도 같은 객체를 가리킨다.
- 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다.
- 기본 버퍼 크기 : 16 //인스턴스 생성시 해당 인스턴스의 길이만큼 추가
- 생성 및 초기화 예시 : StringBuffer sb = new StringBuffer();
StringBuilder
- 문자열 연산이 많고 단일 쓰레드이거나 동기화를 고려하지 않아도 되는 경우에 사용하는 자료형
- String과 다르게 문자열 연산을 해도 같은 객체를 가리킨다.
- StringBuilder는 동기화를 지원하지는 않지만 그 만큼 단일 쓰레드에서의 성능이 좋다.
- 기본 버퍼 크기 : 16 //인스턴스 생성시 해당 인스턴스의 길이만큼 추가
- 생성 및 초기화 예시 : StringBuilder sb = new StringBuilder();
StringBuffer와 StringBuilder의 공통 메소드
- 문자열 추가
- append(“문자열”)
- 해당 객체가 가지고 있는 문자열의 맨 뒤에 문자열 추가
- insert(n, “문자열 “)
- 해당 객체가 가지고 있는 문자열의 n번째 위치에 문자열 추가
- append(“문자열”)
- 문자열 가져오기
- substring(m, n)
- 해당 객체가 가지고 있는 문자열의 m에서 n까지의 문자열을 가져온다.
- substring(m, n)
- 버퍼 크기 가져오기
- capacity()
- 해당 객체의 버퍼 크기를 가져온다.
- capacity()
- 문자열 삭제
- delete(m, n)
- 해당 객체가 가지고 있는 문자열의 m에서 n까지의 문자열을 삭제한다.
- deleteCharAt(n)
- 해당 객체가 가지고 있는 문자열의 n번째 인덱스의 문자를 삭제한다.
- delete(m, n)
- 인덱스 재배열하기
- reverse()
- 해당 문자열의 인덱스를 역순으로 재배열
- reverse()