boolean, int, doubleboolean a = true;
boolean b = false;
// a = null; -> 컴파일 에러
Boolean, Integer, DoubleBoolean x = true; // Auto-boxing: Boolean.valueOf(true)
Boolean y = null; // null 허용
Boolean z = false;
boxing : 원시타입 -> 참조타입 클래스
unboxing : 참조타입 클래스 -> 원시타입
(java 5 부터 컴파일러가 자동으로 변환)
⭐️ java의 컬렉션/제네릭은 객체만 다룰 수 있어 boxing하여 참조 타입 (wrapper) 클래스로 감싸야 객체처럼 쓸수 있음
// 명시적 boxing (옛날 방식)
Integer a = Integer.valueOf(10);
// Auto-boxing (컴파일러가 위 코드로 자동 변환)
Integer b = 10;
Integer x = 100;
int y = x; // Integer -> int 자동 unboxing
// 연산 시에도 자동 unboxing
Integer c = 10;
Integer d = 20;
int result = c + d; // 둘 다 unboxing 후 연산
Integer x = null;
int y = x; // NullPointerException! null을 unboxing 할 수 없음
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (캐시된 객체 재사용)
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (새 객체 생성)
// -> Java는 -128 ~ 127 범위의 Integer 객체를 캐싱해서 재사용함
// 항상 equals() 사용 권장
System.out.println(c.equals(d)); // true
원시 타입 : 일반 변수, 로컬 변수, 성능이 중요할 때
참조 타입 : null 값이 필요할 때, 컬렉션/제네릭 사용할 때