String
클래스
- 문자열을 다루기 위한 클래스
String 클래스 = 데이터(char[]) + 메서드(문자열 관련)
public final class String implements java.io.Serializable, Comparable {
private char[] value;
- 내용을 변경할 수 없는 불변(immutable) 클래스.
String a = "a"; //0x100번지
String b = "b"; //0x200번지
a = a + b; //0x300번지 (a는 새로운 주소를 가리키게 됨.)
- 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어짐.
문자열 결합이나 변경이 잦다면, 내용을 변경 가능한 StringBuffer
를 사용
문자열의 비교
String str = "abc";
와 String str = new String("abc");
의 비교
String str1 = "abc"; // 문자열 리터럴 "abc"의 주소가 str1에 저장됨.
String str2 = "abc"; // 문자열 리터럴 "abc"의 주소가 str2에 저장됨.
String str3 = new String("abc"); // 새로운 String인스턴스 생성.
String str4 = new String("abc"); // 새로운 String인스턴스 생성.
// str1 == str2 str3 == str4
// 0x100 == 0x100 0x300 == 0x400
// true false
- 등가비교(
==
)는 주소
를 비교하고, equals
는 내용
을 비교함.
따라서, 문자열을 비교할 때에는 항상 equals를 사용해야함.
문자열 리터럴
- 문자열 리터럴은 프로그램 실행 시 자동으로 생성됨. (constant pool 에 저장)
- 같은 내용의 문자열 리터럴은 하나만 만들어짐.
빈 문자열 (""
, empty string
)
- 내용이 없는 문자열. 크기가
0
인 char
형 배열을 저장하는 문자열.
String str = "";
//str을 빈 문자열로 초기화
- 크기가
0
인 배열을 생성하는 것은 어느 타입이나 가능
char[] chArr = new char[0];
// 크기가 0인 char 배열
int[] iArr = {};
// 크기가 0인 int 배열
- 문자(char)와 문자열(String)의 초기화
String s = "";
// 빈 문자열로 초기화
char c = '';
// 공백으로 초기화