2010-03-08 12 views
6

Esaminando il bytecode, ho notato che javac sembra duplicare le istruzioni checkcast quando si esegue il casting su tipi di array.Perché javac esegue il checkcast di array due volte?

Cast.java: 
class Cast { 
    void test(Object a) { 
    Object[] b = (Object[])b; 
    } 
} 

javap lo smontaggio della versione compilata javac

void test(java.lang.Object); 
    Code: 
    0: aload_1 
    1: checkcast #2; //class "[Ljava/lang/Object;" 
    4: checkcast #2; //class "[Ljava/lang/Object;" 
    7: astore_2 
    8: return 

Test jikes mostra il singolo getto previsto

void test(java.lang.Object); 
    Code: 
    0: aload_1 
    1: checkcast #10; //class "[Ljava/lang/Object;" 
    4: astore_2 
    5: return 

checkcast si suppone di sollevare un'eccezione se l'oggetto non può essere trattata come il tipo richiesto e altrimenti non fa nulla, quindi non vedo perché potrebbe aiutare a raddoppiare il cast. Non ho guardato le fonti JDK per vedere come è prodotto, e se questo aiuta a spiegare il perché (forse è inteso come un suggerimento).

+1

Interessante ... Discusso altrove: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants

risposta

8

È un known bug di javac. Ma è soprattutto innocuo.

+0

Grazie per il riferimento. Le mie ricerche fallirono. – Brandon

+0

Si potrebbe pensare che sarebbe stato corretto, quanto difficile può essere risolto! –

Problemi correlati