본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/3. 참조 타입

2. Java 자바 참조 타입 - String (문자열)

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에서 쓰레기 객체로 취급되어 가비지 컬렉터에 의해 자동 제거된다.