문자열을 다루기 위한 클래스 : Data(char[], 문자 배열) + Method(문자열 관련)
public final class String implements java.io.Serializable, Comparable {
private char[] value;
...
}
String a = "a" // 참조변수 a가 가리키는 주소 : 0x100
String b = "b" // 참조변수 b가 가리키는 주소 : 0x200
a = a + b // a + b == "ab" : 새로운 메모리 공간에 값이 생성 됨. 주소 : 0x300
// a가 가리키는 주소가 0x300으로 변경
String str1 = "abc"; // 문자열 리터럴 "abc" 주소가 str1에 저장
String str2 = "abc"; // 문자열 리터럴 "abc" 주소가 str1에 저장
// str1과 str2가 가리키는 주소는 같다! (문자열 리터럴 "abc"가 저장된 주소를 가리키기 때문!)
String str3 = new String("abc"); // 새로운 String 인스턴스 생성
String str4 = new String("abc"); // 새로운 String 인스턴스 생성
// str3과 str4가 가리키는 주소는 다르다! (내용이 같아도, new 연산자는 항상 새로운 인스턴스를 만들기 때문)
문자열 리터럴은 프로그램 실행 시, 객체 생성 없이 자동으로 생성됨.
이후, 상수 저장소인 Constant pool에 저장됨.
같은 내용의 문자열 리터럴은 "하나"만 만들어짐.
"", Empty string
내용이 없는 문자열. 길이가 0인 char형 배열을 저장하는 문자열
Java에서는 길이가 0인 배열을 생성하는 것이 허용된다.
String str = ""; // 빈 문자열로 초기화
char[] chArr = new char[0]; // 길이가 0인 char 배열
int[] iArr = {}; // 길이가 0인 int 배열
String s = null; // 기본적으로 null로 초기화 됨
char c = '\u0000'; // 기본적으로 유니코드 첫번째 문자로 초기화 됨
// 아래 방식을 더 권장함
String s = ""; // 빈 문자열로 초기화
char c = ' '; // 공백 문자로 초기화
// new 연산자를 이용하여 String 객체를 만들어서 초기화 하기 보다,
// 그냥 ""로 전부 초기화 하는게 메모리상 이득이다. 하나의 빈 문자열을 전부 공유하기 때문.
String str1 = "";
String str2 = "";
String str3 = "";