> Java > java지도 시간 > 기본 배열을 사용하는 Java Arrays.asList() 메서드의 제한 사항과 예기치 않은 동작은 무엇입니까?

기본 배열을 사용하는 Java Arrays.asList() 메서드의 제한 사항과 예기치 않은 동작은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-21 12:32:09
원래의
914명이 탐색했습니다.

What are the Limitations and Unexpected Behaviors of Java's Arrays.asList() Method with Primitive Arrays?

Arrays.asList() 동작 및 제한 사항

Java에서 Arrays.asList() 메서드는 배열에서 수정할 수 없는 목록을 생성합니다. 값 배열을 전달하는 데 편리한 varargs 인수를 지원합니다. 그러나 기본 배열 유형과 함께 Arrays.asList()를 사용하면 예상치 못한 결과가 발생할 수 있습니다.

다음 코드를 고려하세요.

float[] floatArray = {1.0f, 2.0f, 3.0f};
List<Float> floatList = Arrays.asList(floatArray); // Works

int[] intArray = {1, 2, 3};
List<Integer> intList = Arrays.asList(intArray); // Incorrect
로그인 후 복사

첫 번째 예에서 Arrays.asList()는 성공적으로 List 부동 소수점 값을 부동 개체에 자동 상자화합니다. 그러나 두 번째 예에서 Arrays.asList(intArray)는 List가 아닌 List를 생성합니다.

예기치 않은 동작이 발생하는 이유는 무엇입니까?

Java 제네릭은 기본 유형을 지원하지 않습니다. 대신 Integer 및 Float와 같은 래퍼 클래스를 사용하여 이러한 값을 나타냅니다. Arrays.asList()가 기본 배열과 함께 호출되면 해당 래퍼 클래스의 목록을 생성하려고 시도합니다. 그러나 List (int는 원시적이기 때문에) 기본값은 List입니다.

수정 방법

List Arrays.asList()를 사용하는 int[]에서 먼저 기본 값을 해당 래퍼 클래스에 해당하는 값으로 묶어야 합니다. 이는 Integer.valueOf()와 같은 래퍼 클래스에서 제공하는 정적 메서드를 사용하여 수행할 수 있습니다.

intArray = {1, 2, 3};
Integer[] intObjects = new Integer[intArray.length];
for (int i = 0; i < intArray.length; i++) {
    intObjects[i] = Integer.valueOf(intArray[i]);
}
List<Integer> intList = Arrays.asList(intObjects); // Correct
로그인 후 복사

왜 Autoboxing이 배열에 대해 작동하지 않는가

오토박싱은 전체 배열이 아닌 개별 프리미티브에만 적용됩니다. 예를 들어 Integer.valueOf(intArray) 표현식은 intArray의 모든 요소를 ​​Integer 객체로 자동 상자화하지 않습니다. 대신 컴파일 시간 오류가 발생합니다.

대체 솔루션

또는 기본 배열을 래퍼 목록으로 변환하는 메서드를 제공하는 다른 라이브러리를 사용할 수 있습니다. 수업. 예를 들어, Guava 라이브러리는 기본 int[]를 List로 래핑하는 Ints.asList() 메서드를 제공합니다.

위 내용은 기본 배열을 사용하는 Java Arrays.asList() 메서드의 제한 사항과 예기치 않은 동작은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿