なぜ二回のjavac checkcast配列していますか?
質問
配列型にキャストするとき、
調査バイトコード、私が気づいたのjavacがcheckcast
命令を複製するようです。
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
javacのコンパイルされたバージョンのてjavap分解
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を示し期待シングルキャスト
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
は、オブジェクトが要求された型として扱われ、それ以外の場合は何もしないことができない場合は例外を発生させることになっているので、それはキャストを倍増するために役立つかもしれない、なぜ私は表示されません。私は、それが生産されますどのように確認するためにJDKのソースを見ていない、それは(多分それはヒントとしてのものです)理由を説明する場合に役立ちます。
解決
これは、javacのバグのを知らです。しかし、それはほとんど無害である。
所属していません StackOverflow