public final class Integer extends Number implements Comparable {
...
private int value;
...
}
Integer i = null; // 가능
// int i = null; // Error! 기본형에는 null을 넣을 수 없다.
String s = i.toString(); // toString() 메서드 사용 가능
// List<int> list = new ArrayList<>(); // Error! int형과 같은 기본형은 Generics 타입에 사용불가
List<Integer> list = new ArrayList<>();
// Set<char> set = new HashSet<>(); // Error! char형 Generics타입에 사용불가
Set<Character> set = new HashSet<>();
// Map<String, int> map = new HashMap<>(); // Error! int형 사용불가
Map<String, Integer> map = new HashMap<>();
오토 박싱, 오토 언박싱 → Java5부터
List<Integer> list = new ArrayList<>();
list.add(new Integer(100)); // 객체 생성해서 넣는다.
list.add(100); // 오토박싱 (int -> Integer)
int a = 10;
Integer b = a; // 오토 박싱 (int -> Integer)
int c = b; // 오토 언박싱 (Integer -> int)
equals()
가 오버라이딩되어 있다. → 주소값이 아닌 객체로 값을 비교==
, equals()
모두 사용 가능하다. → 오토 박싱, 언박싱compareTo()
사용toString()
도 오버라이딩되어 있다. → 객체가 갖고 있는 값 문자열 반환 가능Integer i = new Integer(100);
Integer i2 = new Integer(100);
System.out.println((i==i2)); // false -> 두 객체의 주소값이 다르므로 false
System.out.println(i.equals(i2)); // true -> 두 객체가 가진 값이 같으므로 true
System.out.println(i.compareTo(i2)); // 0 -> 두 객체가 가진 값이 같으므로 0. i2가 더 크면 -1, i가 더 크면 1
System.out.println(i.toString()); // 100 -> 문자열로 출력(toString() 메서드 사용 안해도 println 메서드는 자동으로 문자열로 출력해준다)
기본형(primitive) | 래퍼클래스(wrapper class) |
---|---|
null 불가 | null 허용 |
JVM stack 메모리에 저장된다 → 접근이 쉽고 빠르다. | JVM heap 메모리에 저장된다 → 비교적 메모리 접근 속도가 느리다. |
변수 값을 간편하게 선언할 수 있다. 대용량 계산을 빠르게 처리할 수 있다. | 프로그램이 객체지향적이 되도록 돕는다. |
값을 그대로 저장하며, 값의 변경이 가능하다. | 저장된 값을 변경할 수 없다. 변경하려는 값이 든 인스턴스를 새로 생성하여, 새 인스턴스의 주소값만 참조할 수 있다. |
Collection Framework 데이터 구조는 기본형을 저장할 수 없다. | Collection Framework 데이터 구조는 객체를 저장하므로 래퍼 클래스를 사용할 수 있다. |
Generics 타입으로 들어갈 수 없다. | Generics 타입으로 들어갈 수 있다. |
[참고]
https://www.geeksforgeeks.org/wrapper-classes-java/?ref=rp
https://www.geeksforgeeks.org/java-i-o-operation-wrapper-class-vs-primitive-class-variables/
https://shanepark.tistory.com/449
<자바의 정석 - 기초편>