7

检查字节码,我注意到 javaccheckcast在转换为数组类型时似乎重复了指令。

Cast.java:
class Cast {
  void test(Object a) {
    Object[] b = (Object[])b;
  }
}

javap反汇编的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显示了预期的单一演员表

void test(java.lang.Object);
  Code:
   0:   aload_1
   1:   checkcast   #10; //class "[Ljava/lang/Object;"
   4:   astore_2
   5:   return

checkcast如果对象不能被视为请求的类型并且不执行任何操作,则应该引发异常,所以我不明白为什么它可能有助于加倍演员表。我还没有查看 JDK 源代码来了解它是如何产生的,如果这有助于解释原因(也许它是一个提示)。

4

1 回答 1

8

这是 javac 的一个已知错误。但它大多是无害的。

于 2010-03-08T19:56:06.397 回答