String 자료형
- 문자열을 저장하는 자료형
- 반드시 쌍따옴표(" ")를 사용하여 값을 표기
- 변수를 이용해 객체를 따로 생성하지 않아도 자료형을 사용할 수 있음
(물론, 객체를 생성해서 사용할 수도 있음)
# 이스케이프 문자
- 역슬래시(\)를 사용하여 문자열 내부에 특정 문자를 포함시킴
문법 | 기능 |
\t | [Tab] 키만큼 띄움 |
\n | 줄 바꿈 |
\" | " 출력 |
\' | ' 출력 |
\\ | \ 출력 |
# 문자열의 값 비교 메서드
문자열1.equals(문자열2);
- 문자열1과 문자열2의 '내용'이 완전히 동일하면 true 반환
# 문자열의 주소 값 비교 연산자
문자열1 == 문자열2;
- 문자열1과 문자열2의 '주소 값'이 동일하면 true 반환
# 주소 값 확인
System.out.println(System.identityHashCode(변수));
# char[]을 문자열로 변환
char[] charArray = { '문자1', '문자2', ... };
String str = new String(charArray);
String 자료형의 메모리 저장 방식
# 원래 형태
String 참조변수1 = new String("문자열");
String 참조변수2 = new String("문자열");
- 해당 객체는 heap 메모리 영역에 저장됨
- 참조변수1과 참조변수2는 주소 값이 다름 (객체들은 각자의 메모리 공간을 가짐)
# 간소화된 형태
String 변수1 = "문자열";
String 변수2 = "문자열";
- 해당 변수는 상수 풀 영역에 메모리를 저장함
- 변수1과 변수2에 같은 문자열을 저장하면 주소 값이 동일함
- 문자열이 저장된 상태에서, 변수의 값을 다른 문자열로 초기화하면 주소 값이 달라짐
⇒ 상수 풀 영역에 한 번 생성된 문자열은 불변함 (Immutable)
⇒ 동일한 문자열을 생성한다면, 메모리 공간을 새로 생성하지 않고 기존의 문자열을 재활용함
- String 클래스로 문자열을 생성하다 보면 계속해서 상수 풀 영역에서 메모리를 사용하게 됨
→ 문자열을 빈번하게 사용해야 하는 경우 or 메모리를 효율적으로 사용해야 하는 경우
StringBuilder 클래스와 StringBuffer 클래스를 활용함
StringBuilder 자료형
- 단일 쓰레드 프로그램에서 권장함
- 문자열을 여러 번 연결/저장할 때 유용함
# 문자열 합치기 : append 메서드
// 객체 생성 이후
참조변수.append(추가문자열); // 기존 문자열 + 추가 문자열
# StringBuilder 타입을 String 타입으로 형 변환하기 : toString 메서드
// toString 메서드 활용
String 변수 = 참조변수.toString();
// 문자열 연산 활용
String 변수 = 참조변수 + "문자열";
# 메모리 저장 방식
- 변수에 저장된 문자열이 달라져도 주소 값이 동일함
→ String 클래스와 달리, 이미 만들어진 메모리 공간에 다시 접근해서 값을 변경함
(새로운 메모리 공간 생성 X)
StringBuffer 자료형
- 멀티 쓰레드 프로그램에서 동기화를 보장함
- 문자열을 여러 번 연결/저장할 때 유용함 (append 메서드를 자주 사용할 때)
- 메서드 방식은 위에 작성된 StringBuilder와 동일
'Java > Base' 카테고리의 다른 글
[Java] 추상 클래스 (0) | 2023.02.11 |
---|---|
[Java] final 키워드 (0) | 2023.02.11 |
[Java] 상속 관계의 다형성과 참조형 형 변환 (0) | 2023.02.09 |
[Java] 상속 관계와 메서드 오버라이드 (0) | 2023.02.09 |
[Java] 배열 (0) | 2023.02.09 |