2013-08-28 36 views
0

我遇到了starnge java cast錯誤。java cast錯誤:[Ljava.lang.Byte;不兼容[B

當我投了一些對象爲byte [],

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[]。你不能用Java來做到這一點。

你有兩個選擇:

  • 變化無論是提供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

謝謝。什麼是對象的類型?我的意思是什麼時候是一個對象的類型確定?我一直在其他地方使用相同的對象,它根本沒有類型(這裏,它的類型似乎是Byte [])。 – FaceBro

+0

對象的類型在創建時確定並且不會更改。我重複它*從不*改變。如果你有一個'Byte []',那麼它被創建爲'Byte []'。 –