📍 래퍼 클래스
- 래퍼 클래스는 기본 데이터 타입(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