質問

配列型にキャストするとき、

調査バイトコード、私が気づいたの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のバグのを知らです。しかし、それはほとんど無害である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top