📍 래퍼 클래스
- 래퍼 클래스는 기본 데이터 타입(primitive data type)을 객체로 감싸는 클래스이다.
- primitive data type을 Objects(reference data type)로 변환한다.
- 래퍼 클래스는 heap까지 메모리를 차지하기 때문에 되도록 래퍼 클래스보다 기본 데이터 타입을 사용하는 것이 더 좋다.
📍 래퍼 클래스를 사용하는 경우
- 전달 인자를 수정 가능하게 하고 싶은 경우(주소값으로 저장)
- 객체만 처리하는 java.util package의 Class, Collection framework를 사용하는 경우
📍 래퍼 클래스 종류
- String은 래퍼 클래스가 아닌 참조 자료형(reference type) 중 하나이다.
Primitive Data Type | Wrapper Class |
---|
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
📍 오토박싱 & 언박싱
- autoboxing: Primitive data type을 Wrapper Class로 자동 변환하는 것
- unboxing: Wrapper Class을 Primitive data type로 자동 변환하는 것
Integer i = 10;
int i = new Integer(10);
📍 래퍼 클래스 생성
- 오토박싱을 사용하는 방법(권장): Heap 영역의 constant pool에 저장, 공유 가능
- new 연산자를 사용하는 방법: Heap 영역에 저장, 공유 불가
package lesson07;
public class Ex01 {
public static void main(String[] args) {
Integer n2 = 5;
Integer n3 = new Integer(5);
}
}
📍 값 비교
- ① Primitive data type과 Wrapper Class를
==
연산자로 비교할 때, 언박싱을 수행한다. 따라서 Primitive data type이 한쪽에라도 있는 경우, ==
로 값 비교가 가능하다.
- ② 두 변 모두 오토박싱을 사용하여 생성된 래퍼 객체일 경우, constant pool의 메모리를 공유하므로
==
로 값 비교가 가능하다.
- ③ 그 외의 경우,
equal
로 값 비교가 가능하다.
package lesson07;
public class Ex01 {
public static void main(String[] args) {
int n1 = 5;
Integer n2 = 5;
Integer n3 = new Integer(5);
Integer n4 = 5;
System.out.println(n1 == n2);
System.out.println(n1 == n3);
System.out.println(n2 == n4);
System.out.println(n2 == n3);
System.out.println(n2.equals(n3));
}
}
References
🔗 https://www.geeksforgeeks.org/wrapper-classes-java