2010-03-08 20 views
6

Examinando el bytecode, me he dado cuenta de que javac parece duplicar las instrucciones checkcast al convertir a tipos de matriz.¿Por qué javac checkcast arrays dos veces?

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

javap desmontaje de la versión compilada 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 

Prueba jikes muestra la única fundición espera

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

checkcast se supone que lanzar una excepción si el objeto no puede ser tratada como tipo solicitado y de lo contrario no hace nada, por lo que no veo por qué podría ayudar a duplicar el elenco. No he consultado las fuentes de JDK para ver cómo se produce, y si eso ayuda a explicar el por qué (tal vez sea una pista).

+1

Interesante ... Discutido en otra parte: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants

Respuesta

8

Es un known bug de javac. Pero es principalmente inofensivo.

+0

Gracias por la referencia. Mis búsquedas fallaron – Brandon

+0

Pensarías que se arreglaría, ¡qué difícil es arreglarlo! –

Cuestiones relacionadas