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).

Était-ce utile?

La solution

scroll top