小编Bra*_*don的帖子

为什么javac checkcast阵列两次?

检查字节码,我注意到javac似乎checkcast在转换为数组类型时复制指令.

Cast.java:
class Cast {
  void test(Object a) {
    Object[] b = (Object[])b;
  }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

测试jikes显示预期的单演员

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

checkcast如果对象不能被视为请求的类型而不执行任何操作,则应该引发异常,因此我不明白为什么它可能有助于使转换加倍.我没有看过JDK的来源,看看它是如何产生的,如果这有助于解释原因(也许这意味着它的暗示).

jvm bytecode javac jikes

7
推荐指数
1
解决办法
321
查看次数

标签 统计

bytecode ×1

javac ×1

jikes ×1

jvm ×1