2009-06-24 4 views
1

다음 코드가 ArrayStoreException 인 이유는 무엇입니까?예기치 않은 ArrayStoreException

double[] a = {2.0,3.4,3.6,2.7,5.6}; 
int[] b = {2,3,4,5}; 
System.arraycopy(b,0,a,1,4); 
+8

코드가 예외를 throw한다고 주장하는 경우 컴파일하는 코드를 게시해야합니다. –

+0

+1. 누군가가 적어도 double [] a 및 int [] b라고 말하면 편집합니다 – Gandalf

+0

왜 downvotes입니까? 그는 코드를 썼다 !!!!! –

답변

11

: 당신은 루프의 일반 또는 방법에 복귀해야 다음 중 하나가 에 해당하는 경우

그렇지 않으면, ArrayStoreException를이 을 발생하고, 대상은 수정되지 :

가 [...]

의 src 인수 및 최종 도착 인수가 참조 구성 요소 유형이 인 배열에 다른 기본 유형이 있습니다.

여기 정확히 사건

- intdouble 다른 기본 유형, 그래서 설명 된대로 예외가 발생합니다.

arraycopy의 요점은 변환을 적용하지 않고 맹목적으로 원시 데이터를 복사하여 빠르게 처리 할 수 ​​있다는 것입니다. 귀하의 경우 이 전환을 적용해야하므로 실패합니다.

0

시도 이중 ** [] ** A = {2.0,3.4,3.6,2.7,5.6}; 및 int ** [] ** b

3

다른 프리미티브 유형을 가진 배열 사이의 arraycopy에 대한 문서화 된 동작은 구성 요소입니다. 유형을 정상적으로 승격시킬 수 있는지 여부는 중요하지 않습니다. 이것은 arraycopy이하도록 설계된 것입니다.

0

arraycopy()를 사용하여 배열의 int 및 double 요소간에 자동 변환이 수행되지 않습니다. 네이티브 메소드는 배열 타입 동등성을 검사하고 불일치하면 ArrayStoreException을 던집니다. System.arraycopy의 문서에서

for (int i = 0; i < a.length(); i++) 
    a[i] = b[i];