개발공부/JAVA
[JAVA] 참조 타입
jnnjnn
2024. 2. 27. 23:44
자바에서 데이터 타입은 기본 타입과 참조 타입으로 나뉜다. 기본 타입으로 선언된 변수는 값 자체를 저장하고 있지만 참조 타입으로 선언된 변수는 객체가 생성된 메모리 번지를 저장한다. 참조 타입으로는 배열, 열거, 클래스, 인터페이스가 있다.
변수들은 모두 스택이라는 메모리 영역에 생성되는데 참조 타입의 경우 힙 메모리 영역의 참조 타입 번지를 저장한다.
참조 번지의 값을 알고 싶으면 System.identityHashcode()를 사용하면 된다
// new : 메모리 공간 확보
// 연산결과 : 확보된 메모리 공간 위치(주소, hashCode)
int[] arr = new int[]{2, 3};
// arr가 가진 실제 값을 알고 싶을 때
// System.identityHashCode 메소드 사용
int address = System.identityHashCode(arr);
System.out.println(address);
참조 타입의 값을 == 또는 !=로 비교할 때는 힙 영역에 저장된 부분을 비교하는 것이 아닌 참조 타입의 번지를 저장하는 것이다.
int[] arr1;
int[] arr2;
int[] arr3;
arr1 = new int[]{1, 2, 3};
arr2 = new int[]{1, 2, 3};
arr3 = arr2;
System.out.println(arr1 == arr2); // false
System.out.println(arr2 == arr3); // true;
참조 타입 변수는 아직 번지를 저장하지 않았다는 뜻으로 null 값을 가질 수 있다.
이때 변수가 null 값을 가진 객체를 사용하려고 할 때 NullPointerException이라는 예외가 발생한다.