2013-08-28 1 views
0
나는 starnge 자바 캐스트 오류를 ​​encounterd 한

와 호환. 나는 [] 바이트 몇 가지 개체를 캐스팅자바 캐스팅 오류 : [Ljava.lang.Byte; [B

,

byte [] a = new byte[lenght]; 
a = (byte[])obj;//obj is actually a byte array with the same number of elements 

나는 다음과 같은 오류

[Ljava.lang.Byte; incompatible with [B 

이의 원인은 무엇 발생? 사전 통찰력에 감사드립니다.

+5

는 "바이트"는 "바이트"를 포함 할 수있는 객체 클래스입니다. "바이트"는 "스칼라"값이며 객체 클래스는 아닙니다. 나는 "obj"가 "byte []"가 아니라 "Byte []"로 선언되었다고 추측하고 있습니다. –

+1

'Byte'과'byte'이/언 박싱 박스 될 수 있지만, 두 유형의 배열이 서로에 캐스트 할 수 없습니다. 'byte []! = Byte []'. –

답변

3

당신은 byte[]Byte[] 캐스팅하려고합니다. 자바에서는 그렇게 할 수 없습니다. 대신 byte[]을 만들 obj에있는 Byte[]를 제공하고 어떤

  • 변경 :

    당신은 두 가지 선택이있다.

  • Byte[]byte[]으로 변환하십시오. 예를 들어 :

    Byte[] tmp (Byte[]) obj; 
    byte[] a = new byte[obj.length]; 
    for (int i = 0; i < a.length; i++) { 
        a[i] = tmp[i]; 
    } 
    
+0

감사합니다. Object의 유형은 무엇입니까? 개체 유형이 언제 결정됩니까? 나는 다른 장소에서 같은 객체를 사용하고 있고, 그것은 전혀 타입 (여기,이 유형의 바이트 [] 것 같다)가 없습니다. – FaceBro

+0

오브젝트의 유형은 작성 될 때 결정되며 절대 변경되지 않습니다. 나는 그것을 결코 반복하지 않는다. 'Byte []'가 있으면'Byte []'로 만들어졌습니다. –