String 타입 변수는 문자열 객체를 참조한다. (문자열은 String 객체로 생성, 변수는 String 객체를 참조한다.)
String 변수 선언 및 문자열 객체 참조
String 변수이름 = "문자열" |
- 문자열 리터럴이 동일하다면, 동일한 String 객체를 공유하도록 되어있다.
ex)
name1 = "케피";
name2 = "케피";
스택 영역 |
힙 영역 |
name1 : 224 번지 name2 : 224 번지 |
224 번지 : "케피" |
- new 연산자를 사용해서 직접 String 객체를 생성할 수 있다. (서로 다른 객체)
(new 연산자는 힙 영역에 새로운 객체를 만드는 객체 생성 연산자)
String name1 = new String("케피");
String name2 = new String("케피");
스택 영역 |
힙 영역 |
name1 : 254 번지 name2 : 256 번지 |
254 번지 : "케피" 256 번지 : "케피" |
서로 다른 객체 참조!
- 비교 연산시의 결과
동일한 문자열 리터럴로 String 객체를 생성한 경우 == 연산시 true!
new 연산자로 String 객체를 생성한 경우 == 연산시 false!
ex)
String name1 = "케피";
String name2 = "케피";
String name3 = new String("케피");
name1 == name2; // true
name1 == name3; // false
- 문자열만 비교할 때는 equals( ) 메소드를 사용한다.
boolean result = str1.equals(str2); |
str1 : 원본 문자열
str2 : 비교 문자열
public class StringEqualsExam {
public static void main(String[] args) {
String str1 = "kephi";
String str2 = "kephi";
if (str1 == str2) {
System.out.println("str1과 str2는 참조가 같음");
} else {
System.out.println("str1과 str2는 참조가 다름");
}
if (str1.equals(str2)) {
System.out.println("str1과 str2는 문자열이 같음");
}
String str3 = new String("kephi");
String str4 = new String("kephi");
if (str3 == str4) {
System.out.println("str3와 str4는 참조가 같음");
} else {
System.out.println("str3와 str4는 참조가 다름");
}
if (str3.equals(str4)) {
System.out.println("str3와 str4는 문자열이 같음");
}
}
}
- String 변수는 참조 타입이므로 null 로 초기화가 가능하다.
String hobby = null; |
문자열로 초기화 이후, 더 이상 String 객체를 참조하지 않도록 할 수 있다.
String hobby = "여행";
String hobby = null;
참조를 잃은 String 객체는 JVM에서 쓰레기 객체로 취급되어 가비지 컬렉터에 의해 자동 제거된다.
'Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어] > 3. 참조 타입' 카테고리의 다른 글
6. Java 자바 참조 타입 - 다차원 배열 (0) | 2020.05.07 |
---|---|
5. Java 자바 참조 타입 - 커맨드 라인 입력 (String[] args 용도) (0) | 2020.05.06 |
4. Java 자바 참조 타입 - 배열 길이 (0) | 2020.05.06 |
3. Java 자바 참조 타입 - 배열 (0) | 2020.05.05 |
1. Java 자바 - 메모리 사용영역, 참조 타입 변수 특징 (0) | 2020.04.27 |