참조 타입(reference type)
-
참조 타입의 종류: 배열, 열거, 클래스, 인터페이스
-
참조 타입 변수는 스택(stack) 영역에 생성되어 힙(heap) 메모리 영역의 번지(주소)를 값으로 갖는다.
- 주소를 통해 객체를 참조한다는 뜻에서 참조 타입이라고 부른다.
참조 변수의 ==, != 연산
-
참조 타입 변수들 간의 ==, != 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용된다.
-
서로 다른 객체를 참조하는 참조 타입 변수들간의 비교는 기본 타입과 다른 결과를 나타낸다.
-
예)
int x = 3;
int y = 3;
String hello = new String("안녕하세요");
String hi = new String("안녕하세요");
if ( hello == hi ) {
System.out.println("안녕하세요.");
} else if ( hello != hi) {
System.out.println("안녕 못해요.");
}
if (x == y) {
System.out.println("X와 y는 같습니다.");
} else if ( x != y) {
System.out.println("x와 y는 다릅니다.");
}
- 출력
안녕 못해요.
x와 y는 같습니다.
참조 타입 변수의 null
- 참조 타입 변수가 null 값을 가질 경우 참조할 객체가 없으므로 객체는 힙 메모리 영역에 생성되지 않고, 변수만 스택 영역에서 생성되어 null 값을 가진다.
- 따라서, null 값을 가진 참조 타입 변수의 ==, != 연산은 기본 타입과 동일하다.
- 참조 타입 변수가 null 값을 가진 상황에서 프로그램을 실행할 경우 (혹은 프로그램 실행 중 참조 타입 변수가 null 값을 가질 경우) NullPointerException 예외가 발생한다.
String 타입
-
문자열을 저장하는 참조 타입
-
자바에서 String은 문자열 리터럴이 동일할 경우 객체를 공유하도록 되어 있다. (new 연산자로 새로운 객체를 생성하지 않고 = 대입 연산자로 같은 문자열을 저장할 경우)
-
String 객체의 equals() 메소드를 사용해서 객체에 상관없이 문자열을 비교할 수 있다.
-
형식
String x; // 기본값은 null
x = "hello"; // 선언한 x에 문자열 값을 대입, " " (쌍따옴표) 사용
String y = "hello"; // 선언과 동시에 문자열 저장 x == y 는 true
String z = new String("hello"); // 새로운 객체 생성, y == z 는 false
if ( y.equals(z) ) {
System.out.println("true"); // true 출력
}
'프로그래밍 > Java' 카테고리의 다른 글
마로의 Java(자바) 정리 - 9. 참조 타입(3): 열거(enum) 타입 (853) | 2016.06.28 |
---|---|
마로의 Java(자바) 정리 - 9. 참조 타입(2): 배열(Array) (1625) | 2016.02.16 |
마로의 Java(자바) 정리 - 8. 자바 메모리 구조 (2752) | 2015.11.23 |
마로의 Java(자바) 정리 - 7. 제어문(Control Flow Statement)-반복문 (7789) | 2015.11.12 |
마로의 Java(자바) 정리 - 7. 제어문(Control Flow Statement)-조건문 (458) | 2015.11.10 |