2010-03-08 18 views
6

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

+1

İlginç ... Başka yerde tartışıldı: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants

cevap

8

Bu javac known bug'dur. Ama çoğunlukla zararsızdır.

+0

Referans için teşekkürler. Aramalarım başarısız oldu. – Brandon

+0

Bunun düzeltileceğini düşünürdünüz, düzeltmek ne kadar zor olabilir! –