기본 유형과 패키지된 기본 유형
주요 차이점
신원 vs. 값:
프리미티브: 정체성이 없습니다. 동일한 값을 갖는 두 개의 프리미티브는 항상 동일합니다.
패키지형: 그것들은 사물이며 정체성을 가지고 있습니다. 두 객체는 동일한 값을 가질 수 있지만 ID는 다를 수 있습니다.
Null 값:
기본값: 항상 기본값을 갖습니다(예: int의 경우 0).
패키지: null일 수 있으며 제대로 처리되지 않으면 NullPointerException 예외가 발생할 수 있습니다.
공연:
기본 요소: 시간과 공간 측면에서 더 효율적입니다.
Packaged: 추가 객체 생성으로 인한 오버헤드를 도입합니다.
프리미티브와 패키지를 혼합할 때 발생하는 일반적인 문제
문제가 있는 예:
Comparator<Integer> naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1);
문제: i == j 비교는 값이 아닌 참조를 비교합니다.
잘못된 동작: naturalOrder.compare(new Integer(42), new Integer(42))는 0 대신 1을 반환합니다.
해결책:
Integer 클래스의 CompareTo 메소드나 유틸리티 메소드를 사용하세요.
Comparator<Integer> naturalOrder = Integer::compare;
또는 원래 비교기를 수정:
Comparator<Integer> naturalOrder = (iBoxed, jBoxed) -> { int i = iBoxed; int j = jBoxed; return (i < j) ? -1 : ((i == j) ? 0 : 1); };
2. 자동 언박싱 및 NullPointerException
null이 될 수 있는 패킹된 유형을 사용할 때 객체가 null이면 자동 unboxing에서 예외가 발생할 수 있습니다.
문제가 있는 예:
Integer i = null; if (i == 42) { System.out.println("Inacreditável"); }
문제: i는 null입니다. 42와 비교하면 null autounboxing이 발생하여 NullPointerException이 발생합니다.
해결책: 가능하면 기본 유형을 사용하세요.
int i = 0; if (i == 42) { System.out.println("Inacreditável"); }
3. Autoboxing/Unboxing으로 인한 성능 저하
집약적인 작업에서 래핑된 유형을 실수로 사용하면 오토박싱 및 불필요한 객체 생성으로 인해 성능 저하가 발생할 수 있습니다.
문제가 있는 예:
Long sum = 0L; for (long i = 0; i <= Integer.MAX_VALUE; i++) { sum += i; } System.out.println(sum);
문제: sum은 꽉 찬 Long입니다. 각 반복마다 자동박싱/언박싱이 발생합니다.
영향: 코드 속도가 훨씬 느려지고 메모리 사용량이 과도해집니다.
해결책:
집중적인 작업에서는 지역 변수에 기본 유형을 사용합니다.
long sum = 0L; for (long i = 0; i <= Integer.MAX_VALUE; i++) { sum += i; } System.out.println(sum);
패키지 유형을 사용해야 하는 경우
우수 사례
요약
기본 유형:
더 간단하고 빠릅니다.
null일 수 없습니다.
정체성이 없습니다(가치만 있음).
포장 유형:
컬렉션 및 일반 API에 사용하는 데 필요합니다.
null일 수 있습니다.
그들은 객체 정체성을 가지고 있습니다.
위 내용은 항목 패키지된 기본 유형보다 기본 유형을 선호합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!