본문 바로가기

IT/Java

06_참조형 데이터 타입

01. 참조형 데이터 타입(reference type)

- 객체(object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.

- 객체타입에서 ==, != 연산자는 같은 객체를 참조하는지 아니면 다른 객체를 참조하는지를 비교한다.

  즉, 주소값을 비교한다고 보면 된다.

 

02. 메모리 구조

Static 영역(메소드 영역) Heap 영역 Stack 영역 System 영역

- JVM이 시작할 때 생성되며 모든 스레드가 공유하는 영역

- 객체와 배열이 생성되는 영역

- 스택영역의 변수나 다른 객체의 필드가 이 곳을 참조

 

- 더 이상 참조되지 않는 객체는 Garbage Collector에 의해 자동으로 제거된다

- 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당 됨

- 변수가 초기화 될 때 메모리가 할당 됨

 

- 블록을 벗어나면 스택에서 제거됨

(untouchable)

- 필드데이터, 메소드데이터, 생성자 등을 저장

#100 ["김자바"]

#200 ["낚시", "독서"]

weight [47.6], age [25]

name [#100]. hobbies[#200]

 

 

03. String 비교

- 전에 언급한 적이 있지만, == 연산자는 같은 객체를 참조하는지를 비교하며 .equals 메소드는 문자열의 내용이 같은지를 비교한다.

- String 객체는 문자열의 내용이 같으면 처음 만든 객체를 여러번 참조(재활용)하여 사용한다.

- 그러나 new String() 으로 만든 객체는 말 그대로 '새로운' 객체이므로 재활용이 아니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package ex01_String;
 
public class StringEqualsExample {
    public static void main(String[] args) {
        String strVar1 = "Zack";
        String strVar2 = "Zack";
 
        if (strVar1 == strVar2) {
            System.out.println("strVar1과 strVar2는 참조가 같음");
        } else {
            System.out.println("strVar1과 strVar2는 참조가 다름");
        }
        
        if(strVar1.equals(strVar2)) {
            System.out.println("strVar1과 strVar2는 문자열이 같음");
        }
        
        String strVar3 = new String("Zack");
        String strVar4 = new String("Zack");
        
        if (strVar3 == strVar4) {
            System.out.println("strVar1과 strVar2는 참조가 같음");
        } else {
            System.out.println("strVar1과 strVar2는 참조가 다름");
        }
        
        if(strVar3.equals(strVar4)) {
            System.out.println("strVar1과 strVar2는 문자열이 같음");
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

'IT > Java' 카테고리의 다른 글

08_클래스 : 필드, 생성자, 메소드  (0) 2019.12.07
07_배열  (0) 2019.12.05
05_중복 없이 로또 번호 추출(조건문, Math.random())  (0) 2019.11.30
04_String 연산자  (0) 2019.11.29
03_정확한 계산  (0) 2019.11.29