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 |