Bayt kodu incelendiğinde, javac'ın dizi türlerine dökülürken checkcast
yönergelerini çoğalttığını fark ettim. Javac derlenmiş sürümününJavac checkcast neden iki kez mi diziyor?
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
javap sökme
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 beklenen tek CAST gösterir
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
nesne tedavi edilemezse bir istisna gerekiyordu İstenen tür olarak ve başka bir şey yapmadığı için, neden dökümün iki katına çıkarıldığını anlayamıyorum. Nasıl üretildiğini görmek için JDK kaynaklarına bakmadım ve eğer bunun nedenini açıklamaya yardım ederse (belki bir ipucu anlamına gelir).
İlginç ... Başka yerde tartışıldı: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants