기본형인 경우 비교 연산자 ‘==’은 두 값이 같은지를 비교했습니다. 그런데 참조형인 경우에는 값을 비교하지 않습니다. 그 대신 가리키는 주소가 같은지, 즉 가리키는 메모리 영역의 주소가 같은지를 비교합니다.
str1과 str2가 같은 영역을 가리키는지 확인하기 위해 두 변수를 비교하는 코드를 if 문으로 작성했습니다. if 문을 블록으로 감싸지 않으면 한 문장만 실행됩니다. 따라서 if 문 괄호 속 조건이 맞으면 우리가 원하는 문장이 출력될 것입니다.
실행결과
str1과 str2는 같은 레퍼런스입니다
출력이 잘 됐습니다. 즉, str1과 str2는 같은 레퍼런스입니다.
다른 부분도 비교하겠습니다. str1과 str3는 같은 레퍼런스일까요? str3와 str4는 같은 레퍼런스일까요?
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는 같은 레퍼런스입니다");
}
}
실행결과
실행결과 아무것도 출력되지 않습니다. str1과 str3, 그리고 str3와 str4는 서로 다른 인스턴스를 가리킨다는 의미입니다.