- 기본 타입 :
int
,double
,boolean
... - 참조 타입 :
String
,List
...
- 박싱된 (기본) 타입 :
Integer
,Double
...- 기본타입에 대응하는 참조 타입
- 기본 타입과의 차이점
- "식별성(
identity
) : 두 박싱된 타입의 값이 같아도 서로 다르다고 식별될 수 있음 null
값을 가질 수 있음- 기본 값에 비해 시간/메모리를 많이 잡아먹음
- "식별성(
Comprator<Integer> naturalOrder = (i,j)->(i<j)?-1:(i==j?0:1);
natuarlOrder.compare(new Integer(42),new Integer(42));
- 두 Integer 인스턴스의 값이 42로 같으므로 0을 출력해야 하지만, 실제로는 1을 출력?!
- Integer의 식별성 때문!
- 박싱된 타입에 == 연산자 사용 시 오류발생
public class Unbelievable {
static Integer i;
public static void main(String[] args) {
if (i == 42)
System.out.println("믿을 수 없군");
}
}
- 믿을순 없군을 출력하진 않지만...
- NullPointerExcpetion 발생!
if(i == 42)
검사 시 null값의 박싱이 풀려서...
public static void main(String[]args) {
Long sum=0L;
for(long i=0;i<=Integer.MAX_VALUE;i++) {
sum+=i;
}
}
- 코드가 느리다!!!
- sum += 과정에서 박싱과 언박싱이 반복...
- 컬렉션의 원소,키,값
- 리플렉션을 통해 메서드 호출할 때
가능하면 박싱 타입 대신 기본 타입을 사용하자