Pourquoi les tableaux javac de checkcast deux fois?
Question
bytecode examen, je l'ai remarqué javac semble reproduire les instructions de checkcast
lors de la coulée à des types de tableau.
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
démontage javap de la version compilée 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
jikes Les tests montrent que seule fonte attendue
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
est censé soulever une exception si l'objet ne peut pas être considéré comme le type demandé et ne sinon rien, donc je ne vois pas pourquoi il pourrait aider à doubler le casting. Je ne l'ai pas regardé les sources JDK pour voir comment il est produit, et si cela aide à expliquer le pourquoi (peut-être est conçu comme un indice).
La solution
Il est un bug connu rel="noreferrer"> de javac. Mais la plupart du temps, il est inoffensif.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow