객체지향 개념에서 모든 것은 객체로 다뤄야한다. 그러나 자바에서는 8개의 기본형을 객체로 다루지 않는다. 그래서 자바가 완전한 객체지향 언어가 아니라는 얘기를 듣지만 대신 보다 높은 성능을 얻을 수 있다.
추상클래스로 내부적으로 숫자를 멤버 변수로 갖는 래퍼 클래스들의 조상이다.
// 문자열 -> 기본형
byte b = Byte.parseByte("100");
int i = Integer.parseInt("100);
long l = Long.parseLong("100");
double d = Double.parseDouble("3.14");
// 문자열 -> 래퍼 클래스
Short s = Short.valueOf("100");
Integer i = Integer.valueOf("100");
Long l = Long.valueOf("100");
Float f = Float.valueOf("100");
// n진수 만들기
int i2 = Integer.parseInt("100", 2);
int i16 = Integer.parseInt("100", 16);
JDK 1.5 이전에는 기본형과 참조형 간의 연산이 불가능 했다. 그러나 이제는 기본형과 참조형 간의 덧셈이 가능하다. 컴퍼일러가 자동으로 변환하는 코드를 넣어주기 때문이다.
// 컴파일러 전
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj;
// 컴파일러 후
int i = 5;
Integer iObj = new Integer(7);
int sum = i + iObj.intValue();
오토박싱: 기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것
언박싱: 반대로 변환하는 것
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(10); // autoboxing. 1 -> new Integer(10)
int value = list.get(0); // unboxing. new Integer(10) -> 10