Bra*_*don 7 jvm bytecode javac jikes
检查字节码,我注意到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的来源,看看它是如何产生的,如果这有助于解释原因(也许这意味着它的暗示).