NMP-Study / EffectiveJava2018

Effective Java Study
9 stars 0 forks source link

아이템 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 #61

Closed madplay closed 5 years ago

enochyeon commented 5 years ago

개요

데이터 타입

문제 사례 1

코드 61-1 잘못 구현된 비교자 - 문제를 찾아보자!

Comparator<Integer> naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1);

// (new Integer(42), new Integer(42)) 입력하면?

코드 61-2 문제를 수정한 비교자

Comparator<Integer> naturalOrder = (iBoxed, jBoxed) -> {
  int i = iBoxed, j = jBoxed; // 오토박싱
  return i < j ? -1 : (i == j ? 0 : 1);
};

문제 사례 2

코드 61-3 기이하게 동작하는 프로그램 - 결과를 맞혀보자!

public class Unbelievable {
  static Integer i;

  public static void main(String[] args) {
  if (i == 42)
    System.out.println("믿을 수 없군!");
  }
}

문제 사례 3

코드 61-4 끔찍이 느리다! 객체가 만들어지는 위치를 찾았는가? - 코드 6-3(#6)과 같음

private static long sum() {
    Long sum = 0L;
    for (long i = 0 ; i <= Integer.MAX_VALUE ; i++) {
        sum += i;
    }

    return sum;
}

정리

박싱된 기본 타입의 사용

  1. 컬렉션의 원소, 키, 값
  2. 매개변수화 타입이나 매개변수화 메서드(5장)의 타입 매개변수로 사용
  3. 리플렉션(#65) 메서드 호출 시
madplay commented 5 years ago

int

Comparator<Integer> naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1);
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(2);
List<Integer> collect = list.stream().sorted(naturalOrder).collect(Collectors.toList());
System.out.println(collect);

image

Integer

Comparator<Integer> naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1);
List<Integer> list = new ArrayList<>();
list.add(new Integer(2));
list.add(new Integer(2));

image