더북(TheBook)

기본형인 경우 비교 연산자 ‘==’은 두 값이 같은지를 비교했습니다. 그런데 참조형인 경우에는 값을 비교하지 않습니다. 그 대신 가리키는 주소가 같은지, 즉 가리키는 메모리 영역의 주소가 같은지를 비교합니다.

 

str1str2가 같은 영역을 가리키는지 확인하기 위해 두 변수를 비교하는 코드를 if 문으로 작성했습니다. if 문을 블록으로 감싸지 않으면 한 문장만 실행됩니다. 따라서 if 문 괄호 속 조건이 맞으면 우리가 원하는 문장이 출력될 것입니다.

 

실행결과

str1과 str2는 같은 레퍼런스입니다

 

출력이 잘 됐습니다. 즉, str1str2는 같은 레퍼런스입니다.

 

다른 부분도 비교하겠습니다. str1str3는 같은 레퍼런스일까요? str3str4는 같은 레퍼런스일까요?

package javaStudy;

public class StringExam {

    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";

        String str3 = new String("hello");
        String str4 = new String("hello");

        if(str1 == str3)
        System.out.println("str1과 str3은 같은 레퍼런스입니다"); 
        
        if(str3 == str4)
        System.out.println("str3과 str4는 같은 레퍼런스입니다"); 
    }
}

 

실행결과

 

 

실행결과 아무것도 출력되지 않습니다. str1str3, 그리고 str3str4는 서로 다른 인스턴스를 가리킨다는 의미입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.