객체지향 개념에서는 모든게 객체지만, 자바에서는 8개의 원시타입은 객체가 아니다
그래서 원시타입이 객체로 변경할 때 필요한게 wrapper 클래스
8개의 기본형과 각 기본형을 객체로 변환시킬 8개의 래퍼클래스가 있음
Character
)와 int(Integer
)를 제외하고 각 기본형타입의 앞글자만 대문자로 표현됨public static void main(String[] args) {
Integer i = new Integer(100); // Integer 객체 생성되어 메모리 추가 사용
Integer i2 = Integer.valueOf(100); // 컴파일러가 wrapper 클래스로 반환해줌, 권장되는 방식
Integer i3 = Integer.valueOf(10);
System.out.println("i == i2: " + (i == i2)); // false
System.out.println("i.equals(i2): " + (i.equals(i2))); // true
System.out.println("i.compareTo(i2): " + (i.compareTo(i2))); // 같음: 0
System.out.println("i.compareTo(i3): " + (i.compareTo(i3))); // i보다 비교하는 값(i3) 보다 더 크면 1
System.out.println("i.toString(): " + i.toString()); // 100
}
equls()
compareTo()
toString()
JDK1.5 이전에는 기본형과 참조형 간의 연산X
→ 래퍼클래스로 기본형을 객체로 만든 후 연산했어야 했음
그러나 이제는 컴파일러가 자동으로 래퍼클래스를 기본형으로 언박싱해줌
// 원본 코드
int i = 5;
Integer obj = new Integer(7);
int sum = i + obj;
// 컴파일 후의 코드
int i = 5;
Integer obj = new Integer(7);
int sum = i + obj.intValue(); // 래퍼클래스를 기본형으로 언박싱