# Reference Type

java에서 원시 타입을 제외하면 모두 Reference Type이다.

* 배열(Array), 클래스(Class), 인터페이스(Interface), 열거(Enum) 타입이 존재한다.
* 빈 객체를 의미하는 NULL이 존재한다.
* Heap 메모리 영역에 생성된다.

  * JVM의 Stack 영역에 존재하는 참조값을 가지는 포인터를 통해서 접근한다.

  &#x20;

```java
String str1 = "address 1"
String str2 = new String("address 2");
String str3 = "address 1"
```

<figure><img src="https://2051848637-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6cHNFpreE0wZTNbZrVFb%2Fuploads%2FVBhcSwGvVSF3jOuMkO2U%2F%E1%84%8E%E1%85%A1%E1%86%B7%E1%84%8C%E1%85%A9%20%E1%84%90%E1%85%A1%E1%84%8B%E1%85%B5%E1%86%B8%20Heap.png?alt=media&#x26;token=0e12eb25-b239-46f5-8bde-975b9bc27018" alt=""><figcaption></figcaption></figure>

* 참조형 변수는 <mark style="color:red;">**`"=="`**</mark>를 사용해서 값이 아니라 메모리 주소를 비교한다.
  * str1 != str2
  * str1 == str3
  * 만약 str2의 값이 "address 1" 이어도 <mark style="color:orange;">참조하는 주소가 다르기 때문에 다른 객체</mark>이다.
