먼저 String타입에 대해 알아보고 다음에 나머지 참조형타입에 대해 알아보겠다.
- 작은 따옴표(’’)를 감싼 문자는 char타입에 저장된다고 했는데 큰따옴표(””)로 감싼 문자열은 String 타입에 저장된다.
문자열을 String타입에 저장된다? ❌
사실은 문자열은 String타입에 “저장”되는 것이 아니다. 참조형 타입은 객체의 번지를 참조한다고 했다. 따라서 문자열이 String타입에 직접 저장되는 것이 아니라 String객체를 생성하고 변수는 String객체를 참조하게 되는 구조이다.
🙋♂️ String을 선언해보고 어디에 저장하는지 확인해보자.
String student;
student = "김자바";
String grade = "3학년";
✨ 자바에서는 문자열 리터럴이 같으면 동일한 객체를 참조한다.
String student1 = "김자바";
String student2 = "김자바";
✨ 자바에서는 new 생성자를 통해 새로운 객체를 생성할 수 있다.
String student1 = new String("김자바");
String student2 = new String("김자바");
🙋♀️ 비교연산자의 결과가 어떻게 나오는지 확인해보자.
String student1 = "김자바"; //문자열 리터럴로 객체생성
String student2 = "김자바";
String student3 = new String("김자바"); //new 연산자로 객체생성
student1 == student2; //true
student2 == student3; //false: 다른 객체를 참조하므로 false가 나온다.
boolean result = student2.equals(student3)); //true
문자열 내부에는 역슬래시()가 붙은 문자를 사용할 수 있는데 이를 이스케이프 문자라고 한다.
이스케이프문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다.
이스케이프 문자 | 내용 |
---|---|
\t | 탭만큼 띄움 |
\n | 줄 바꿈 |
\r | 캐리지리턴 |
\” | “출력 |
\’ | ‘출력 |
\ | \출력 |
\u16진수 | 16진수 유니코드에 해당하는 문자 출력 |
🙋♂️ 예제를 통해 확인해보자.
String str1 = "나는 \"사과\"를 좋아합니다.";
String str2 = "사과\t포도\t바나나";
String str3 = "사과\n\포도\n\바나나";
큰따옴표로 감싸진 문자열은 String타입에 직접 저장되는 것이 아니라 String객체를 생성하고 변수는 String객체를 참조하게 되는 구조이다.
같은 문자열은 동일한 객체를 참조하는데 new연산자를 통해 객체를 생성하면 같은 문자열이더라도 다른 객체를 참조한다. equals()메소드를 이용하면 문자열만 비교할 수 있다.
문자열 내부에서 특정문자를 사용할 수 있게 하는 이스케이프문자가 있다.
잘봤습니다.