다음 코드가 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);
다음 코드가 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);
: 당신은 루프의 일반 또는 방법에 복귀해야 다음 중 하나가 에 해당하는 경우
여기 정확히 사건그렇지 않으면, ArrayStoreException를이 을 발생하고, 대상은 수정되지 :
가가 [...]
의 src 인수 및 최종 도착 인수가 참조 구성 요소 유형이 인 배열에 다른 기본 유형이 있습니다.
- int
및 double
다른 기본 유형, 그래서 설명 된대로 예외가 발생합니다.
arraycopy
의 요점은 변환을 적용하지 않고 맹목적으로 원시 데이터를 복사하여 빠르게 처리 할 수 있다는 것입니다. 귀하의 경우 은이 전환을 적용해야하므로 실패합니다.
시도 이중 ** [] ** A = {2.0,3.4,3.6,2.7,5.6}; 및 int ** [] ** b
다른 프리미티브 유형을 가진 배열 사이의 arraycopy
에 대한 문서화 된 동작은 구성 요소입니다. 유형을 정상적으로 승격시킬 수 있는지 여부는 중요하지 않습니다. 이것은 arraycopy
이하도록 설계된 것입니다.
arraycopy()를 사용하여 배열의 int 및 double 요소간에 자동 변환이 수행되지 않습니다. 네이티브 메소드는 배열 타입 동등성을 검사하고 불일치하면 ArrayStoreException을 던집니다. System.arraycopy
의 문서에서
for (int i = 0; i < a.length(); i++)
a[i] = b[i];
코드가 예외를 throw한다고 주장하는 경우 컴파일하는 코드를 게시해야합니다. –
+1. 누군가가 적어도 double [] a 및 int [] b라고 말하면 편집합니다 – Gandalf
왜 downvotes입니까? 그는 코드를 썼다 !!!!! –