기본 자료형을 제외한 나머지 모든 자료형으로 클래스, 인터페이스, Enum 등을 말하는데, 기본 자료형과 참조 자료형은 데이터를 저장하는 방식에 차이가 있다.

기본 자료형은 스택에 바로 값이 저장되지만, 참조 자료형은 힙 영역에 실제 값을 저장하고 스택에는 값을 참조하기 위한 주소값이 저장된다. 그래서 "참조"자료형이다!
이러한 특성 때문에 값을 비교할 때 기본 자료형은 ==으로 비교하지만, 참조 자료형은 == 사용 시 false로 나온다. 참조 자료형의 값 비교 시에는 equals()를 사용해야 한다.
Wrapper Class는 기본 타입을 객체로 사용하기 위한 클래스로, 말 그대로 기본 자료형을 해당 Wrapper class의 인스턴스로 만든다. 기본 자료형을 객체로 사용해야 하는 상황은 다음과 같다.
래퍼 클래스에 의해 객체가 되면 값의 비교는 당연하게도 equals()를 사용해야 한다.
| 기본 타입 | 래퍼 클래스 | 언박싱 메서드 |
|---|---|---|
| byte | Byte | byteValue() |
| short | Short | shortValue() |
| int | Integer | intValue() |
| long | Long | longValue() |
| float | Float | floatValue() |
| double | Double | doubleValue() |
| char | Character | X |
| boolean | Boolean | booleanValue() |
래퍼 클래스들은 java.lang에 포함되어 있어 import하지 않고 사용 가능하다.
기본 자료형에서 래퍼 클래스의 인스턴스로 변환하는 것을 Boxing,
래퍼 클래스의 인스턴스 값을 기본 자료형으로 변환하는 것을 Unboxing이라고 한다.
Java는 박싱과 언박싱을 자동으로 해주는 AutoBoxing, AutoUnBoxing을 제공한다.
아래와 같은 경우를 예시로 볼 수 있다.
// 박싱 & 언박싱
Integer num = new Integer(17);
int n = num.intValue();
// 오토 박싱 & 언박싱
Integer num = 17;
int n = num;
아주 편리하지만 '형 변환'은 성능에 영향을 줄 수 있다. auto casting이 자주 발생하면 속도가 저하될 수 있기 때문에 이 점을 유의하여 코드를 작성해야 한다!!
https://inpa.tistory.com/entry/JAVA-%E2%98%95-wrapper-class-Boxing-UnBoxing